Mysql 优化日期过滤器

Mysql optimizing date filter

在以下两个查询中,sql 引擎(尤其是 mysql)是否有任何区别?

SELECT * FROM table where date = '2019-01-01'

并且:

SELECT * FROM table where date = DATE('2019-01-01')

执行 explain returns 结果相同,但也许存在某种我没有发现的差异?我需要 运行 针对数十亿行的查询 table 并尝试在 运行 之前对其进行优化。

不应该有。应该在编译阶段对表达式 DATE('2019-01-01') 求值,将结果转换为日期。同样,常量值'2019-01-01'被隐式转换为日期进行比较。

这允许 MySQL(和大多数其他数据库)使用在该列上定义的索引和分区。

Date() 函数提取日期或 date/time 表达式的日期部分

例如字段名BirthTime的值为“2017-09-26 16:44:15.581” 所以你必须使用以下查询来检查日期:

SELECT 日期(出生时间)

结果是:2017-09-26