MySQL - 如何选择" max"一个"计数"包含数百万条记录的表的列?

时间:2014-12-22 23:37:19

标签: mysql performance optimization group-by

我有一个名为ticket_log的表,其中有数百万条记录。每个故障单日志都用于故障单,因此ticket_log表具有ticket_id列。我需要找出哪个票据具有最大日志数。

如果该表只有几千个条目,那么以下查询就可以轻松完成 -

select ticket_id, count(ticket_log_id) as myCount 
from ticket_log 
group by ticket_id 
order by myCount desc limit 1

但是,当我尝试在包含数百万条记录的表上运行它时,查询将永远存在。一些优化技术建议我们可以为查询添加一个类别的过滤器,例如where ticket_created > '2014',但这不是一个选项。

鉴于这种情况,如何针对大量记录优化查询?

更新该查询需要花费一个多小时来运行包含数百万条记录的表格。

1 个答案:

答案 0 :(得分:1)

如果您有tickets表,则以下内容可能会更快:

select ticket_id,
       (select count(*) 
        from ticket_log tl
        where t.ticket_id = tl.ticket_id
      ) as mycount
from tickets t
order by myCount desc
limit 1;

这可以利用ticket_log(ticket_id)上的索引。