我有一个名为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'
,但这不是一个选项。
鉴于这种情况,如何针对大量记录优化查询?
更新:该查询需要花费一个多小时来运行包含数百万条记录的表格。
答案 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)
上的索引。