MySQL – Subselect vs union

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Magnus
Člen | 65
+
0
-

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!

CZechBoY
Člen | 3608
+
+1
-

pockej ale ty dve veci se pouzivaj na neco jinyho.. uniin přidává radky a subselect pridava sloupce

Magnus
Člen | 65
+
0
-

Nejde mi o formát výsledku, můžu jej získat jako jeden i více řádků, záleží mi nyní čistě jen o to, zda některé z řešení nemá nějakou zásadní nevýhodu, a popřípadě proč.

CZechBoY
Člen | 3608
+
0
-

Asi bych sel radsi do X dotazu.

japlavaren
Člen | 404
+
0
-

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