我正在使用 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/