Pomalý dotaz

4 příspěvky

Archiv diskusního fóra

Fórum je uzavřené a slouží pouze ke čtení. Některé informace mohou být zastaralé.

  1. 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
  2. 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;
  3. 0,0035 pecka díky.. ;-) jen pro info.. jak indexuji vysledek dotazu ? :-)
  4. 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é.

← Zpět na všechna témata