我在继承的 PHP 控制面板/管理屏幕上有一系列 MySQL 记录集和查询。我发现两个查询似乎特别慢并且都使用 CURDATE,所以我认为这可能是问题所在,或者至少这似乎是共享元素,使它们与其他查询不同,除了更复杂一点之外。
我压缩了语句以使用 IN 语句,我可以在其中优化它,但不知道我还能做些什么来加快这些查询的速度或用更好的东西替换 CURDATE?
当我删除 PHP session 值之后的所有内容(包括 CURDATE 和其他 AND/OR 语句)时,它显然会加快查询速度。
查询1:
SELECT COUNT(ID) AS total_count
FROM HTG_ScheduleRequest
WHERE AssignedTech = '".$emp."'
AND (ScheduleDateExact > CURDATE())
AND JobStatus IN (2,5,8)
AND RecordType = '1'
OR SSR = '".$emp."'
AND (ScheduleDateCurrent > CURDATE())
AND JobStatus IN (3,4)
AND RecordType = '1'
查询2:
SELECT COUNT(ID) AS total_count
FROM HTG_ScheduleRequest
WHERE AssignedTech = '".$emp."'
AND JobStatus IN (2,5,8)
AND ScheduleDateExact >= DATE_ADD(CURDATE(), INTERVAL 1 DAY)
AND ScheduleDateExact < DATE_ADD(CURDATE(), INTERVAL 2 DAY)
AND RecordType = '1'
OR SSR = '".$emp."'
AND JobStatus IN (3,4)
AND ScheduleDateCurrent >= DATE_ADD(CURDATE(), INTERVAL 1 DAY)
AND ScheduleDateCurrent < DATE_ADD(CURDATE(), INTERVAL 2 DAY)
AND RecordType = '1'
最佳答案
重新格式化查询后,您的逻辑似乎被破坏了。我相信你想要:
SELECT COUNT(ID) AS total_count
FROM HTG_ScheduleRequest
WHERE (
AssignedTech = '".$emp."'
AND (ScheduleDateExact > CURDATE())
AND JobStatus IN (2,5,8)
AND RecordType = '1'
) OR (
SSR = '".$emp."'
AND (ScheduleDateCurrent > CURDATE())
AND JobStatus IN (3,4)
AND RecordType = '1'
)
除此之外,您的查询看起来不错,并且日期函数的细节不应影响任何内容。我建议查看这些查询的 EXPLAIN
输出,看看是否需要定义或调整表上的索引。
关于php - MySQL 使用 PHP session 值通过 CURDATE 执行速度变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33640148/