字段日期部分的索引?

Gla*_*ost 2 mysql index mysql-5.6

我有一个日期时间字段,但我经常查询日期部分,如下所示

select * from table where date(datetime_field)=curdate()
Run Code Online (Sandbox Code Playgroud)

此查询不能在 datetime_field 上使用索引!对代码或数据库进行最少更改的最佳解决方案是什么?

附言。如果有我还不知道的解决方案,升级 mysql 可能是一个选择,但 5.6 的更短期解决方案将不胜感激

Mic*_*bot 5

问题不在于索引。问题是您编写的查询不允许使用索引。

修改您的查询,以便将日期范围解析为一对常量并解决问题:

WHERE datetime_field >= CURDATE()
  AND datetime_field < DATE_ADD(CURDATE(), INTERVAL 1 DAY)
Run Code Online (Sandbox Code Playgroud)

这将使用列上的索引。

通常,切勿使用列作为函数的参数,WHERE因为这会强制进行表扫描。