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

Har*_*ldo 5 mysql

我正在使用解释来测试这些查询.col类型是DATE

这使用索引:

explain SELECT events.* FROM events WHERE events.date = '2010-06-11' 
Run Code Online (Sandbox Code Playgroud)

这不是

explain SELECT events.* FROM events WHERE events.date >= '2010-06-11' 
Run Code Online (Sandbox Code Playgroud)

索引如下(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       
Run Code Online (Sandbox Code Playgroud)

我注意到基数是0,虽然有一些行具有相同的日期..

Wri*_*ken 7

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

SELECT events.* FROM events
FORCE INDEX (date)
WHERE events.date >= '2010-06-11';
Run Code Online (Sandbox Code Playgroud)