Mysql a outer join
Jan Kasprzak
kas na informatics.muni.cz
Pondělí Říjen 4 15:58:23 CEST 1999
Zdravim, mam takovy problem - a nevim jak to vyoptimalizovat:
Mam tabulku T2 s primarnim klicem ID (int), a tabulku T1 s primarnim
klicem ID (int) a tremi dalsimi ciselnymi sloupci C1, C2 a C3, na kterych
mam index, a ktere maji slouzit jako vazba do T2. Potrebuju najit
takove radky v T2, ktere nemaji odkaz z T1 ani v jednom z C1, C2, C3.
Pro jeden sloupec je to rozumne rychle:
SELECT T2.ID FROM T2 LEFT OUTER JOIN T1 ON T2.ID = T1.C1 WHERE T1.ID IS NULL;
(explain rika, ze se pouzije "ref" a skutecne je to celkem rychle).
Ale pokud chci testovat vsechny tri sloupce, explain mi rekne, ze pouziva
"ALL" a skutecne je to hrozne pomale:
SELECT T2.ID FROM T2 LEFT OUTER JOIN T1 ON T2.ID = T1.C1 OR T2.ID = T1.C2
OR T2.ID = T1.C3 WHERE T1.ID IS NULL;
On asi nepozna, ze ten ON vyraz je v podstate jednoduchy, nebo
tak neco.
Nebo jinak: Jak co nejrychleji vyberu z T2 radky, ktere nejsou
navazany na T1 ani pres jedno z C1, C2 nebo C3?
-Yenya
--
\ Jan "Yenya" Kasprzak <kas at fi.muni.cz> http://www.fi.muni.cz/~kas/
\\ PGP: finger kas at aisa.fi.muni.cz 0D99A7FB206605D7 8B35FCDE05B18A5E //
\\\ Czech Linux Homepage: http://www.linux.cz/ ///
/// I'd much prefer a sane architecture that doesn't continually try to \\\
// reinvent the bad idea of memory windows. -Linus on Xeon 36-bit MM \\
Další informace o konferenci Databases