mysql - 为什么解释在索引列上显示 'using where' 而不是 'using index'?

标签 mysql

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

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

我运行这个查询“select id from tablename where id between num1 and num2”。这导致将近 10 秒。
现在我在 where 条件日期中添加,例如“从表名中选择 id,其中 id 在 num1 和 num2 之间,日期在 date1 和 date2 之间”。它会在 4 分钟内产生结果。

“日期”字段也被编入索引。

在第一种情况下,在 Explain 中,它在“extra”列中显示“using index”,而在第二种情况下,在 Explain 中,它在“extra”列中显示“using where”。

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

最佳答案

是否有一个索引同时包含 iddate 这两个列?如果没有,请创建一个。当索引与 where 条件紧密匹配(或者:将您的 where 条件与您的索引匹配)时,索引的使用效率最高。

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

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

关于mysql - 为什么解释在索引列上显示 'using where' 而不是 'using index'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18717583/

相关文章:

mysql - 杀死 InnoDB 上的优化是否安全?

mysql - 基于 WHERE 或 JOIN 选择

MySQL - 查找给定的同一个表中有多少重复项

MySQL 连接所有列

php - 将 CSV 文件保存到 mysql 数据库中

MySQL 在未指定的列上报告未知列

mysql函数分割结果

php - Mysql INSERT INTO 不工作-语法正确

php - 挑选随机获胜者

php - 在 If 语句后添加 php 代码