我使用的是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的不同行为的原因,以及查询所用时间的差异 请任何人向我解释这些,以便我可以在正确的方向上进行优化查询。
答案 0 :(得分:2)
是否有一个索引按顺序包含id
和date
列?如果没有,请创建一个。当索引与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
。