php - MySQL 使用 PHP session 值通过 CURDATE 执行速度变慢

标签 php mysql

我在继承的 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/

相关文章:

mysql - MySQL 中 BOOL 和 BOOLEAN 类型的区别?

c# - 导入MySQL时格式化数据表日期列

mysql - SELECT ... INTO OUTFILE 性能

jquery - 如何在perl中加快从mysql加载图片的速度

php - 从最近的订单日期算起

javascript - 从另一个页面展开各种引导折叠 div

php - textarea 未发布在 $_POST 中

MySQL将数十亿行的同一表中的一列复制到另一列花费太长时间

php - 电子邮件已存在于数据库 Codeigniter 中

javascript - 将数据附加到 simpleWebRTC 房间或视频