MySql - 来自Table的Sum数据,以及来自子表的聚合数据 - 性能问题

时间:2017-04-06 22:21:13

标签: mysql performance join

我有以下查询

select q.has_content_violation, 
  if(q.max_finding_status = 1, 1, 
    if(q.min_finding_status >=3, 3, 2)) scan_item_finding_status,  
  count(*)
from (
    SELECT si.id, if(f.id is not null, true, false) has_content_violation, 
        min(f.finding_status) min_finding_status, 
        max(f.finding_status) max_finding_status
    FROM bank b
    JOIN merchant m ON m.bank_id = b.id
    JOIN merchant_has_scan ms ON m.last_scan_completed_id = ms.id
    JOIN scan_item si ON si.merchant_has_scan_id = ms.id
    LEFT JOIN finding f ON f.scan_item_id = si.id
    WHERE f.finding_type = 1
    GROUP BY si.id
    ) q
GROUP BY scan_item_finding_status, q.has_content_violation

查询从表finding获取数据并将其聚合为扫描项,查找是否有多个关键参数,如finding_type=1,并使用left join查找scan_item } findings在子表中有finding_type=1。 之后,外部查询获取聚合数据并将其总结为某些列。 查询工作得很好,但外部查询不使用索引并执行全表搜索。 有没有办法让外部查询更好地运行并使用索引?这个查询将在每次运行10,000行时运行并且将全天运行,因此最重要的是它将尽可能快

0 个答案:

没有答案