gpt4 book ai didi

mysql - 如何优化包含 DATE_ADD() 的 mysql 查询?

转载 作者:行者123 更新时间:2023-11-29 06:13:44 26 4
gpt4 key购买 nike

这是需要优化的查询:

Scans: 527676 records...
Returns: 496 records...

SELECT * FROM customers c
WHERE DATE_ADD(c.`custdate` ,INTERVAL -5 HOUR) BETWEEN '2011-09-14 00:00:00' AND '2011-09-14 23:59:59'
AND c.`custtype`='L'

这与不使用 DATE_ADD 的情况相同:

Scans: 801 records...
Returns: 481 records...

SELECT * FROM customers c
WHERE c.`custdate` BETWEEN '2011-09-14 00:00:00' AND '2011-09-14 23:59:59'

问题是我应该如何使用 DATE_ADD() 函数优化此查询?在不使用 DATE_ADD 的情况下,它会获取我的索引并且查询没问题。

正在等待有关此问题的帮助。

谢谢

拉希尔

最佳答案

由于您只是向 c.custdate 添加一个恒定的时间间隔,因此应该从 BETWEEN 值中减去该时间间隔,以获得逻辑上等效但允许 MySQL 使用索引的查询。一般来说,如果查询需要评估索引值的函数,则不能使用范围扫描。

即:代替 WHERE 子句

DATE_ADD(c.`custdate` ,INTERVAL -5 HOUR) BETWEEN '2011-09-14 00:00:00' AND '2011-09-14 23:59:59'

成功

c.`custdate` BETWEEN '2011-09-14 05:00:00' AND '2011-09-15 04:59:59'

关于mysql - 如何优化包含 DATE_ADD() 的 mysql 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7803994/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com