你想要确定的是,查询将只使用索引,所以请确保索引涵盖所有选择的字段.此外,由于它是一个范围查询涉及,您需要在索引中首先使用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