Убедитесь, что запрос будет использовать ТОЛЬКО индекс, поэтому убедитесь, что индекс охватывает все поля, которые вы выбираете. Кроме того, поскольку речь идет о запросе диапазона, сначала в индексе должен быть 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