对左连接行进行计数的 MySQL SELECT 查询花费的时间太长

斯塔基

有谁知道如何优化这个查询?

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

较慢的部分是获取匹配单元和课程的总数。我有以下字段(和其他字段)的索引:

  • planbook.pb_id
  • planbook_unit.pb_unit_pb_id
  • planbook_lesson.pb_lsn_pb_id

我唯一的目标是获得匹配单元和课程的总数以及每个计划书行的详细信息。

但是,此查询大约需要 35 秒。我在 planbook 中有 1625 条记录,planbook_unit 中有 13,693 条记录,planbook_lesson 中有 122,950 条记录。

有什么建议么?

编辑:解释结果

解释结果

里克·詹姆斯
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)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章