Това, което искате да сте сигурни, е, че заявката ще използва САМО индекса, така че се уверете, че индексът покрива всички полета, които избирате. Освен това, тъй като е включена заявка за диапазон, трябва първо да имате venid в индекса, тъй като той е заявен като константа. Затова бих създал и индексирал така:
ALTER TABLE events ADD INDEX indexNameHere (venid, date, time);
С този индекс цялата информация, която е необходима за завършване на заявката, е в индекса. Това означава, че да се надяваме, че механизмът за съхранение е в състояние да извлече информацията, без всъщност да търси вътре в самата таблица. Въпреки това MyISAM може да не е в състояние да направи това, тъй като не съхранява данните в листата на индексите, така че може да не получите желаното увеличение на скоростта. Ако случаят е такъв, опитайте да създадете копие на таблицата и използвайте двигателя InnoDB върху копието. Повторете същите стъпки там и вижте дали ще получите значително увеличение на скоростта. InnoDBправи съхранява стойностите на полетата в листата на индекса и позволява покриване на индекси.
Сега се надяваме, че ще видите следното, когато обяснявате заявката:
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