Pomalý dotaz

Ahoj všem, mám tento jednoduchý dotaz

select distinct znacka from m005_roztec_new inner join m005_disky using(roztec) where kategorie = 1 order by znacka asc

dotaz trvá cca 10 sekund což je masakr..

tabulka m005_roztec_new ma index na sloupci znacka a roztec a tabulka m005_disky ma index na index na sloupci index (jsou tam i jine indexy, ale ty by to snad ovlinovat nemeli)

kdyz dam dotaz bez distinct trva 0,00001 jakmile je tam distinct trva cca tech 10 sekund.. nevim uz co s tim..

Explain vypada takto..



id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE m005_roztec_new ALL roztec NULL NULL NULL 815 Using temporary; Using filesort
1 SIMPLE m005_disky ref roztec,kategorie roztec 32 autocentrumrkcz.m005_roztec_new.roztec 308 Using where; Distinct
Výsledek dotazu není indexován. To se pak těžko dělá distinct.

Zkus nahradit JOIN operátorem IN.

select distinct znacka from m005_roztec_new where roztec IN (
select roztec from tabulka m005_disky where kategorie = 1
)
order by znacka asc;
0,0035 pecka díky.. ;-) jen pro info.. jak indexuji vysledek dotazu ? :-)
Výsledek JOIN se indexovat nedá. Alespoň ne v MySQL. Proto se to musí všelijak obcházet, aby se spojování tabulek dělalo až naposled. V daném případě to ani nebylo nutné.