Autor | Zpráva | ||
---|---|---|---|
Kcko Profil |
#1 · Zasláno: 9. 11. 2012, 17:38:46
Ahoj,
řeším zajímavý problém. SELECT t1.kod, t1.nazev FROM lek_atc t1 JOIN lek_skupiny_trzby t2 ON t2.atc_skupina = t1.kod Mám tento jednoduchý dotaz. Spojuji 2 tabulky (dohromady cca 1M záznamů) a nepoužije se vytvořený index na sloupci kód (první tabulka PK, druhá FK) sloupce jsou typu VARCHAR(7). Pokud odmažu t1.nazev tak se index použije. Neví někdo proč se tak děje? |
||
Kajman Profil |
#2 · Zasláno: 9. 11. 2012, 23:01:21
Asi si plánovač myslí, že to tak bude lepší, když stejně musí pro získání názvu projít celou tabulku lek_atc - ale pravda to být nemusí. Jaký je rozdíl v rychlostech tohoto dotazu s dotazem, kde se hintem vynutí použití indexu?
|
||
Kcko Profil |
#3 · Zasláno: 9. 11. 2012, 23:11:49
Asi to tak bohužel bude. Forcování jsem samozřejmě zkoušel (omlouvám se, že jsem to nenapsal), ale i tak se index prostě nepoužije. Je to celkem zajímavý problém. Ještě zkusím nějaký poddotaz, omezit limitem, pak to předělám na číselné indexy a poté budu v koncích.
|
||
Kajman Profil |
#4 · Zasláno: 9. 11. 2012, 23:23:09
Vytvoření společného indexu na obou sloupcích (kod, nazev) je akceptovatelné?
|
||
Kcko Profil |
#5 · Zasláno: 10. 11. 2012, 16:06:33
Kajman:
Je, nicméně, tu tabulku jsem zde pro příklad velmi zjednoduššil. To co me nějvíc trápí, že tam jsou i další sloupečky (v té druhé tabulce) a pokud na nich není index tak to takhle zlobí. Nechápu, na co by měl pomoci index pokud se sloupeček použije pouze pro vytažení dat (nikoliv ke spojování či řazení = na tyto akce snad indexy jsou. ) S takovýmto zvláštním problémem jsem se ještě nesetkal a trošku mi to hlava nebere. Předělám na číselné hodnoty a pak budu ladit aplikačně protože MySQL v tomto případě nechápu :( |
||
Časová prodleva: 11 let
|
0