MySQL – Subselect vs union
- Magnus
- Člen | 65
Ahoj,
dá se nějak obecně říct, zda je výkonově lepší použít subselect či union, nebo záleží na konkrétním případu? Kdysi jsem se někde dočetl, že subselecty neumí využít indexy, tedy by vyhledávání mohlo být pomalejší. Důvod, proč chci problém řešit jedním z těchto způsobů, je, že mám asi 10 dotazů hledající hodnotu jednoho sloupce, tak to chci vše provést v rámci jedné komunikace s databází, a všechny výsledky spojit do jednoho.
Dotaz se subselecty by pak vypadal přibližně následovně:
SELECT * FROM (
(SELECT column FROM table WHERE condition LIMIT 1) AS name1,
(SELECT column FROM table2 WHERE condition LIMIT 1) AS name2,
(SELECT column FROM table3 WHERE condition LIMIT 1) AS name3,
...
)
Dotaz s využitím UNION:
(SELECT column AS value, 'name1' AS name FROM table WHERE condition LIMIT 1)
UNION
(SELECT column AS value, 'name2' AS name FROM table2 WHERE condition LIMIT 1)
UNION
(SELECT column AS value, 'name3' AS name FROM table3 WHERE condition LIMIT 1)
...
Ve většině tabulek by mohly být desetitisíce záznamů. Dá se obecně
zvolit lepší varianta, nebo to nelze spolehlivě určit pouze na základě
návrhu?
Díky!
- japlavaren
- Člen | 404
tiez by som siel do X dotazov. ak ich je 10 tak nieje problem (aj keb\ ich bolo 100 a nedaju sa jednoducho spojit tak je to ok). ono vsade sa uvadza, aby bol „maly“ pocet dotazov na databazu, osobne skor preferujem „konstantny“ pocet na databazu. tj. aby query nerobila reukrzivne nasobky dotazov
cize tych tvojich 10 dotazov je ok