鉴于以下查询,我如何优化它以使子查询不依赖?MySQL的 - 如何优化查询与多个依赖子查询独立?
SELECT DISTINCT
inst.id, inst.name, inst.state, inst.farm_status,
(SELECT COUNT(inst_note.id)
FROM project_institution_note AS inst_note
WHERE inst_note.institution_id = inst.id) AS inst_note_count,
(SELECT COUNT(c.id) FROM project_catalog AS c
WHERE c.institution_id = inst.id
AND c.status = 0
AND c.catalog_type BETWEEN 0 AND 1) AS ug_count,
(SELECT COUNT(c.id) FROM project_catalog AS c
WHERE c.institution_id = inst.id
AND c.status = 0
AND c.catalog_type BETWEEN 1 AND 2) AS grad_count,
(SELECT COUNT(c.id) FROM project_catalog AS c
WHERE c.institution_id = inst.id
AND c.status = 0 AND c.catalog_type >= 3) AS alt_count,
(SELECT COUNT(c.id) FROM project_catalog_note AS cn
INNER JOIN farmtool_catalog AS c
ON c.id = cn.catalog_id
WHERE c.institution_id = inst.id) AS catalog_note_count,
(SELECT inst_note.text FROM project_institution_note AS inst_note
LEFT JOIN project_institution AS inst
ON inst_note.institution_id = inst.id
WHERE inst_note.institution_id = inst.id
ORDER BY inst_note.date DESC
LIMIT 1) AS latest_note
FROM project_institution AS inst
LEFT JOIN project_institution_note AS inst_note
ON inst.id = inst_note.institution_id
LEFT JOIN project_catalog AS c
ON inst.id = c.institution_id
WHERE LOWER(inst.state) = "me";
我试图重构第一子查询到INNER JOIN
像这样:
INNER JOIN (SELECT COUNT(inst_note.id)
FROM project_institution_note AS inst_note
GROUP BY inst_note.institution_id) inst_note_count
ON inst_note.institution_id = inst.id
最后LEFT JOIN
操作之后包括,但返回一个空的结果。
我特别感兴趣的是优化第二个和第三个子查询,计算出ug_count
和grad_count
。两者之间的唯一区别是第一个依赖于(0,1)之间的字段值和(1,2)之间的第二个字段值。
此时此查询运行正常,处于低使用情况。尽管如此,它显然非常低效,所以我希望尽可能优化。
我会使用临时表。它保持清晰并避免所有这些子查询 – Alee
您的意思是? – Jason
没有视图与临时表不同。 http://stackoverflow.com/questions/16897323/what-to-use-view-or-temporary-table。我会尝试用一些示例发布答案。 – Alee