Autor Zpráva
Kcko
Profil
Ahoj,

mam tu takovyto pomerne trivialni dotaz

SELECT COUNT(1) total_rows 
FROM data 
WHERE (IDATE >= 20100414) AND (IDATE <= 20100415) AND MASTER_CHANNEL_ID = 3 AND Q6 IN (9, 10) UNION
ALL 
SELECT COUNT(1) total_rows 
FROM data 
WHERE (IDATE >= 20100414) AND (IDATE <= 20100415) AND MASTER_CHANNEL_ID = 3 AND Q6 IN (7, 8) UNION
ALL 
SELECT COUNT(1) total_rows 
FROM data 
WHERE (IDATE >= 20100414) AND (IDATE <= 20100415) AND MASTER_CHANNEL_ID = 3 AND Q6 <= 7



Index byl puvodne vytvoreny jako (IDATE+MASTER_CHANNEL_ID)
- nepouzije se

Tak jsem to rozhodil na 2 jednotlive indexy
- nepouzije se

takze to musim nutit pomoci
FORCE INDEX


Nema pro to nekdo logicke vysvetleni? Nejak to nechapu (IDATE = dat. typ. INT, MASTER_CHANNEL_ID = SMALLINT)

Diky za snahu


Edit: Ted jsem prohodil slouceny index IDATE+MASTER_CHANNEL_ID na => MASTER_CHANNEL_ID + IDATE a uz to vybira z mnoziny, ze ktere to vybirat ma. Nechapu :-)

Kajmane?
Kajman_
Profil *
Asi plánovači přijde, že prvotní omezení díky master_channel_id je pro něj výhodnější. V idate je hodně velký interval datumů? Většinou se bere v potaz i četnost a rozložení hodnot v indexovaném sloupci.

Možná se pletu, ale dobře kombinovat jednotlivé indexy možná umí mysql až v nějakých posledních verzích.
Kcko
Profil
Kajman:
v IDATE jsou zatim cca 5 ruznych hodnot, ale bude jich tam N* pak.
Jednotlive indexy - ano, jen jsem to zkousel.


Proste moc nechapu slouceni 2 indexu kdyz u obou kombinaci plati pravidlo zleva-doprava. Oba jsou splneny a v jednom pripade to vezme a druhy ne. Slo mi o to, pochopit proc se tak deje.
Kazdopadne dik.
Kajman_
Profil *
Když vybíráš 2 z pěti hodnot v idate (a ještě budou hodně četné), tak si mysql může myslet, že tam index moc využitelný nebude. Když budeš mít v idate časem více datumů, je pravděpodobné, že se stane index využívaným.
Kcko
Profil
Aha to je zajimave, (stejne to asi "ZFORCUJU"), data ted tolik nemam a pak nemuzu do bezici aplikace uz moc sahat. 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:

0