有谁知道如何优化此查询?
SELECT planbook.*,
COUNT(pb_unit_id) AS total_units,
COUNT(pb_lsn_id) AS total_lessons
FROM planbook
LEFT JOIN planbook_unit ON pb_unit_pb_id = pb_id
LEFT JOIN planbook_lesson ON pb_lsn_pb_id = pb_id
WHERE pb_site_id = 1
GROUP BY pb_id
缓慢的部分是获得匹配单位和课程的总数。我在以下字段(和其他字段)上有索引:
我唯一的目标是获得匹配单位和课程的总数以及每个计划行的详细信息。
但是,此查询大约需要35秒。我在planbook中有1625条记录,在planbook_unit中有13,693条记录,在planbook_lesson中有122,950条记录。
有什么建议吗?
编辑:解释结果
答案 0 :(得分:1)
查看您的查询
您应该为
添加和索引table planbook column pb_site_id
最终是
的复合版table planbook column (pb_site_id, pd_id)
答案 1 :(得分:1)
SELECT planbook.*,
( SELECT COUNT(*) FROM planbook_unit
WHERE pb_unit_pb_id = planbook.pb_id ) AS total_units,
( SELECT COUNT(*) FROM planbook_lesson
WHERE pb_lsn_pb_id = planbook.pb_id ) AS total_lessons
FROM planbook
WHERE pb_site_id = 1
planbook: INDEX(pb_site_id)
planbook_unit: INDEX(pb_unit_pb_id)
planbook_lesson: INDEX(pb_lsn_pb_id)