Wat u zeker wilt weten, is dat de query ALLEEN de index zal gebruiken, dus zorg ervoor dat de index alle velden omvat die u selecteert. Omdat het een bereikquery is, moet u ook de venid als eerste in de index hebben, omdat deze als een constante wordt opgevraagd. Ik zou daarom zo maken en indexeren:
ALTER TABLE events ADD INDEX indexNameHere (venid, date, time);
Met deze index staat alle informatie die nodig is om de query te voltooien in de index. Dit betekent dat, hopelijk, de opslagengine in staat is om de informatie op te halen zonder daadwerkelijk in de tabel zelf te zoeken. Het is echter mogelijk dat MyISAM dit niet kan doen, omdat het de gegevens niet opslaat in de bladen van de indexen, dus het kan zijn dat u niet de gewenste snelheidsverhoging krijgt. Als dat het geval is, probeer dan een kopie van de tabel te maken en gebruik de InnoDB-engine op de kopie. Herhaal daar dezelfde stappen en kijk of je een significante snelheidsverhoging krijgt. InnoDB doet sla de veldwaarden op in de indexbladen en laat dekkende indexen toe.
Hopelijk ziet u nu het volgende wanneer u de vraag uitlegt:
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