与 '<' 或 '>' 运算符一起使用时,MySQL 不在 DATE 上使用索引?

标签 mysql

我正在使用 explain 来测试这些查询。 col类型是DATE

这使用索引:

explain SELECT events.* FROM events WHERE events.date = '2010-06-11' 

这不是

explain SELECT events.* FROM events WHERE events.date >= '2010-06-11' 

索引如下(phpmyadmin)

Action  Keyname Type    Unique  Packed  Field   Cardinality Collation   Null    Comment
Edit    Drop    PRIMARY BTREE   Yes No  event_id    18  A       
Edit    Drop    date    BTREE   No  No  date    0   A       

我注意到基数是 0,尽管有些行具有相同的日期..

最佳答案

如果 MySQL 不使用索引,它已经看到您的查询,并估计表扫描可能比使用索引更快(就可能需要的 IO/磁盘操作而言)。您可以使用 FORCE INDEX 并检查此查询是否使用索引实际上会更快。

SELECT events.* FROM events
FORCE INDEX (date)
WHERE events.date >= '2010-06-11';

关于与 '<' 或 '>' 运算符一起使用时,MySQL 不在 DATE 上使用索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3068989/

相关文章:

mysql - 为什么是 "Not allowed to return a result set from a function"?

mysql - 如何在单表继承上强制执行参照完整性?

mysql - 知道 6 个月前是哪一个月,Mysql

php - 优化 : large MySQL table, 仅使用最近的记录

php - 无法在 opencart 自动完成管理中获取所有类别

mysql - 用于组合多个查询输出的存储过程

mysql - 如何使用 RIDE 连接到 MySQL

MySQL TIMESTAMPDIFF 函数不返回预期结果

mysql - linux命令行根据mysql结果集压缩文件

mysql - Sequelize : Using truncate and insert within same transaction