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
在以下两个查询中,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