MySQL DATEDIFF函数VS比较INTERVAL DAY

Ken*_*Ken 0 mysql sql performance query-optimization where-clause

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

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

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

结果数据是一样的,但似乎2.方法更快一点?

GMB*_*GMB 5

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

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

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

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