datediff函数和直接减去间隔日有什么区别?SELECT * FROM table WHERE DATEDIFF(CURDATE(), publish_date) <= 3 SELECT * FROM table WHERE publish_date >= CURDATE() - INTERVAL 3 DAY 结果数据是一样的,但似乎 2. 路快一点?
SELECT * FROM table WHERE publish_date >= CURDATE() - INTERVAL 3 DAY
2.
kd3sttzy1#
第一个表达式,使用 DATEDIFF() 在进行筛选之前,需要对每一行应用date函数。相比之下,第二个表达式并不意味着这样的预处理: CURDATE() - INTERVAL 3 DAY 只计算一次,然后直接与 publish_date . 此 predicate 可以利用日期列上的索引。这是正确的方法。在技术术语中,我们说第二个 predicate 是sargable,而第一个 predicate 不是:这表示搜索参数是sargable经验法则:如果你有办法的话,不要将函数应用到你过滤的列上。
DATEDIFF()
CURDATE() - INTERVAL 3 DAY
publish_date
1条答案
按热度按时间kd3sttzy1#
第一个表达式,使用
DATEDIFF()
在进行筛选之前,需要对每一行应用date函数。相比之下,第二个表达式并不意味着这样的预处理:
CURDATE() - INTERVAL 3 DAY
只计算一次,然后直接与publish_date
. 此 predicate 可以利用日期列上的索引。这是正确的方法。在技术术语中,我们说第二个 predicate 是sargable,而第一个 predicate 不是:这表示搜索参数是sargable
经验法则:如果你有办法的话,不要将函数应用到你过滤的列上。