Ken*_*Ken 0 mysql sql performance query-optimization where-clause
DATEDIFF函数和直接减去INTERVAL DAY有什么区别?
SELECT * FROM table WHERE DATEDIFF(CURDATE(), publish_date) <= 3
SELECT * FROM table WHERE publish_date >= CURDATE() - INTERVAL 3 DAY
结果数据是一样的,但似乎2.方法更快一点?
使用的第一个表达式需要在过滤发生之前DATEDIFF()对每一行应用日期函数。
相比之下,第二个表达式并不意味着这样的预处理:CURDATE() - INTERVAL 3 DAY仅计算一次,然后直接与 的值进行比较publish_date。该谓词可以利用日期列上的索引。这是正确的做法。
用技术术语来说,我们说第二个谓词是sargable,而第一个谓词不是:这代表Search ARGument ABLE
根据经验:如果有办法,请不要将函数应用于您筛选的列。