Autor | Zpráva | ||
---|---|---|---|
stoker Profil |
Zdravim,
mam jednoduchy dotaz: SELECT id FROM tabulka WHERE sloupec1 = 1 OR sloupec2 = 1 OR sloupec3 = 1 Moderátor Kajman: Vkládej prosím kódy mezi značky [>pre] a [>/pre] (stačí kliknout na ).
Pri provadeni ale MySQL prochazi vsechny radky v tabulce, radku je hodne, dotaz tedy trva dlouho. Vsechny 3 sloupce jsou indexovane. Dokazete dotaz upravit tak, aby vyuzival indexy, neprochazel celou tabulku? diky |
||
Kajman Profil |
#2 · Zasláno: 29. 5. 2013, 12:34:04
Všechny tři samostatné dotazy, kde se filtruje jen podle jednoho sloupce, jsou svižné a index se použije?
|
||
stoker Profil |
#3 · Zasláno: 29. 5. 2013, 14:42:39
Kajman:
takhle, ve skutecnosti je ten dotaz slozitejsi, ale pro ukazku jsem si myslel, ze toto bude stacit. Nestacilo, vyse uvedeny dotaz je rychly, indexy pouziva v poradku. Abych tedy uvedl na pravou miru, dejme tomu: SELECT id FROM tabulka WHERE (sloupec1 = 1 OR sloupec2 = 1 OR sloupec3 = 1) AND sloupec4 = 1 Podarilo se vyresit takto: SELECT t.id FROM tabulka t JOIN (SELECT id FROM tabulka WHERE sloupec1 = 1 OR sloupec2 = 1 OR sloupec3 = 1) t1 ON t1.id=t.id WHERE sloupec4 = 1 diky |
||
Časová prodleva: 11 let
|
0