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