为什么Explain在索引列上显示'使用where'而不是'using index'?

时间:2013-09-10 11:20:54

标签: mysql

我使用的是mysql,我的表类型是myisam,有1亿条记录。

此表在30列上添加了90列和索引。

我运行此查询“从tablename中选择id,其中num1和num2之间的id”。这导致差不多10秒钟 现在我添加条件日期,例如“从tablename中选择id,其中num1和num2之间的id以及date1和date2之间的日期”。它导致4分钟。

'date'字段也被编入索引。

在Explain中的第一个案例中,它在“extra”列中显示“using index”,而在Explain中显示第二个案例,它在“extra”列中显示“using where”。

我不明白Explain的不同行为的原因,以及查询所用时间的差异 请任何人向我解释这些,以便我可以在正确的方向上进行优化查询。

2 个答案:

答案 0 :(得分:2)

是否有一个索引按顺序包含iddate列?如果没有,请创建一个。当索引与where条件非常匹配时(或其他方式:将where条件与索引匹配),索引的使用效率最高。

如果id列上有索引且where子句仅使用该列,则可以有效地使用索引。

如果where条件中有两列且未找到匹配的索引,则执行全表扫描。

答案 1 :(得分:2)

select id from tablename where id between num1 and num2

这可以仅从id索引解决,而不会触及表格。这就是using index的含义。

select id from tablename where id between num1 and num2 and date between date1 and date2

MySQL将从id索引获取内部ROWID,然后转到实际表并获取所有相应的行,以便检查日期是否为between date1 and date2