Chcete se ujistit, že dotaz bude používat POUZE index, takže se ujistěte, že index pokrývá všechna pole, která vybíráte. Vzhledem k tomu, že se jedná o dotaz na rozsah, musíte mít v indexu na prvním místě venid, protože je dotazován jako konstanta. Proto bych vytvořil a indexoval takto:
ALTER TABLE events ADD INDEX indexNameHere (venid, date, time);
S tímto indexem jsou všechny informace potřebné k dokončení dotazu v indexu. To znamená, že doufejme, že úložný modul je schopen načíst informace, aniž by skutečně hledal uvnitř samotné tabulky. MyISAM to však nemusí umět, protože neukládá data do listů indexů, takže nemusíte dosáhnout požadovaného zvýšení rychlosti. Pokud je to tak, zkuste vytvořit kopii tabulky a použijte na kopii engine InnoDB. Opakujte stejné kroky a uvidíte, zda se výrazně zvýší rychlost. InnoDB dělá uložit hodnoty polí do indexových listů a umožnit zakrytí indexů.
Doufejme, že nyní při vysvětlování dotazu uvidíte následující:
mysql> EXPLAIN SELECT date, time FROM events WHERE venid='47975' AND date>='2009-07-11' ORDER BY date;
id select_type table type possible_keys key [..] Extra
1 SIMPLE events range date_idx, indexNameHere indexNameHere Using index, Using where