Det du vil sikre dig er, at forespørgslen KUN bruger indekset, så sørg for at indekset dækker alle de felter, du vælger. Da det også er en intervalforespørgsel involveret, skal du have venid først i indekset, da det forespørges som en konstant. Jeg ville derfor oprette og indeksere sådan:
ALTER TABLE events ADD INDEX indexNameHere (venid, date, time);
Med dette indeks er al den information, der er nødvendig for at fuldføre forespørgslen, i indekset. Det betyder, at lagermotoren forhåbentlig er i stand til at hente informationen uden egentlig at søge inde i selve tabellen. Dog kan MyISAM muligvis ikke gøre dette, da det ikke gemmer dataene i indeksbladene, så du får muligvis ikke den hastighedsforøgelse, du ønsker. Hvis det er tilfældet, prøv at oprette en kopi af tabellen og brug InnoDB-motoren på kopien. Gentag de samme trin der og se, om du får en væsentlig hastighedsforøgelse. InnoDB gør gemme feltværdierne i indeksbladene og tillade at dække indekser.
Nu vil du forhåbentlig se følgende, når du forklarer forespørgslen:
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