Autor Zpráva
Kcko
Profil
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
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
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
Vytvoření společného indexu na obou sloupcích (kod, nazev) je akceptovatelné?
Kcko
Profil
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 :(

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: