MySQL DATEDIFF 函数 VS 比较 INTERVAL DAY

Posted

技术标签:

【中文标题】MySQL DATEDIFF 函数 VS 比较 INTERVAL DAY【英文标题】:MySQL DATEDIFF function VS compare INTERVAL DAY 【发布时间】:2020-08-06 07:00:28 【问题描述】:

DATEDIFF函数和直接减去INTERVAL DAY有什么区别?

    SELECT * FROM table WHERE DATEDIFF(CURDATE(), publish_date) <= 3

    SELECT * FROM table WHERE publish_date >= CURDATE() - INTERVAL 3 DAY

结果数据是一样的,不过好像2.的方式快一点?

【问题讨论】:

【参考方案1】:

使用DATEDIFF() 的第一个表达式需要在过滤发生之前对每一行应用日期函数。

相比之下,第二个表达式并不意味着这样的预处理:CURDATE() - INTERVAL 3 DAY 只计算一次,然后直接与publish_date 的值进行比较。此谓词可以利用日期列上的索引。这是正确的做法。

在技术术语中,我们说第二个谓词是sargable,而第一个不是:这代表Search ARGument ABLE

根据经验:如果您有办法,请不要将函数应用于您过滤的列。

【讨论】:

感谢您的清晰解释并提出了 sargable ^^ 如果你在publish_date 上有一个可用的索引,那么关于 shargeable 的注释对性能的影响远比“应用日期函数”重要。

以上是关于MySQL DATEDIFF 函数 VS 比较 INTERVAL DAY的主要内容,如果未能解决你的问题,请参考以下文章

求高人介绍MySQL的datediff函数

Mysql 常用函数(28)- datediff 函数

Mysql 常用函数(28)- datediff 函数

(MySQL) 使用 DATEDIFF 函数时遇到问题

MySql数据库中的datediff函数

关于vb中datediff函数中日期的表示方法