mysql - SQL 查询需要很长时间才能运行

标签 mysql query-performance

我正在尝试运行此 SQL 查询:

SELECT 
        a.ticketnumber 
    FROM 
        ticket_updates a 
    LEFT JOIN 
        ticket_updates b 
    ON 
        b.ticketnumber = a.sequence AND b.type = 'reminder_complete' 
    WHERE 
        b.ticketnumber IS NULL AND 
        (a.type = 'reminder' OR a.type = 'reminder_high') AND 
        (a.for_agent = '' OR a.for_agent = '2') AND 
        a.notes <= '2018-05-10 23:00:00' AND 
        a.ticketnumber NOT IN (
    SELECT ticketnumber 
                                FROM ticket_updates 
                                WHERE 
                                type = 'reminder_complete' AND 
                                ticketnumber = a.ticketnumber)

但由于某种原因,返回任何结果需要 14.8126 秒。

测试时,它返回 1 行,我无法弄清楚为什么它这么慢。我相信这可能与连接有关,但我希望有人可以帮助并指出我正确的方向?

如果我错过了任何信息,请原谅我的无知。

最佳答案

除了其他答案之外,您还需要这些索引:

a:  (type, for_agent, notes, ticket_number)
a:  (for_agent, type, notes, ticket_number)
ticket_updates:  (type, ticket_number)

LEFT JOINNOT IN结合起来可能有帮助:

AND NOT EXISTS 
   ( SELECT 1 
       FROM ticket_updates b
      WHERE b.ticketnumber IN ( a.sequence, a.ticketnumber )
        AND b.type = 'reminder_complete' )
   )

关于mysql - SQL 查询需要很长时间才能运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50260905/

相关文章:

sql - MySQL:为用户获得最高分

sql - 为什么添加 ORDER BY 会大大加快查询速度?

使用 JOIN 的 MySQL 查询不使用 INDEX

php - MySql 中的按计数分组(用户和组)

MySQL:在单个 Cell 中读取大数据还是在多个 Cell 中读取较小数据更快?

php - 将 php 搜索数组与查询结果相结合 - 内连接 php 数组

mysql - 什么是 MySQL 主键(key1、key2)

mysql - 使用 InnoDB 引擎比较 MySQL 中大 'text' 类型值的最有效方法

postgresql - 如何判断 Postgres 表何时聚集以及使用了哪些索引

postgresql - 分析: Why a query taking could take so long,好像成本不高?