1

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

该表有 90 列,并在 30 列上添加了索引。

我运行此查询“从表名中选择 id,其中 id 在 num1 和 num2 之间”。这导致近 10 秒。
现在我添加条件日期,例如“从表名中选择 id,其中 id 在 num1 和 num2 之间,日期在 date1 和 date2 之间”。结果是4分钟。

“日期”字段也被索引。

在 Explain 的第一种情况下,它在“extra”列中显示“使用索引”,而在 Explain 的第二种情况下,它在“extra”列中显示“使用 where”。

我不明白解释不同行为的原因,以及查询时间的差异。
请任何人向我解释这些,以便我可以朝着优化查询的正确方向工作。

4

2 回答 2

2

是否存在包含两列id并按date该顺序排列的索引?如果没有,请创建一个。当索引与条件非常匹配时where(或者:将where条件与索引匹配),索引的使用效率最高。

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

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

于 2013-09-10T11:27:24.170 回答
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.

于 2013-09-10T11:28:05.940 回答