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
Všechny tři samostatné dotazy, kde se filtruje jen podle jednoho sloupce, jsou svižné a index se použije?
stoker
Profil
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
cili kdyz do podminky pridam sloupec4, uz je problem.

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

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: