Chcesz się upewnić, że zapytanie użyje TYLKO indeksu, więc upewnij się, że indeks obejmuje wszystkie wybrane pola. Ponadto, ponieważ jest to zapytanie o zakres, musisz mieć venid jako pierwszy w indeksie, ponieważ jest on pytany jako stała. Dlatego utworzyłbym i zindeksowałbym tak:
ALTER TABLE events ADD INDEX indexNameHere (venid, date, time);
Dzięki temu indeksowi wszystkie informacje potrzebne do wykonania zapytania znajdują się w indeksie. Oznacza to, że miejmy nadzieję, że silnik pamięci masowej jest w stanie pobrać informacje bez faktycznego szukania w samej tabeli. Jednak MyISAM może nie być w stanie tego zrobić, ponieważ nie przechowuje danych w liściach indeksów, więc możesz nie uzyskać pożądanego wzrostu prędkości. Jeśli tak jest, spróbuj utworzyć kopię tabeli i użyj na kopii silnika InnoDB. Powtórz te same kroki i sprawdź, czy uzyskasz znaczny wzrost prędkości. InnoDB robi przechowuj wartości pól w liściach indeksu i zezwól na pokrycie indeksów.
Miejmy nadzieję, że podczas wyjaśniania zapytania zobaczysz następujące informacje:
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