我有以下查询
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行时运行并且将全天运行,因此最重要的是它将尽可能快