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的主要内容,如果未能解决你的问题,请参考以下文章