【发布时间】:2021-11-09 16:05:06
【问题描述】:
我有以下疑问:
SELECT OBJ_DESC_ERRORS.description, OBJ_DESC_ERRORS.object, OBJ_DESC_ERRORS.count_errors, OBJ_ERRORS.count_total FROM
(SELECT `metrics_event`.`description`, `metrics_event`.`object`, COUNT(`metrics_event`.`id`) AS `count_errors` FROM `metrics_event`
INNER JOIN `metrics_session` ON (`metrics_event`.`session_id` = `metrics_session`.`id`)
WHERE (`metrics_session`.`training_id` = 4 AND NOT (`metrics_session`.`completed_at` IS NULL) )
GROUP BY `metrics_event`.`description`, `metrics_event`.`object` ORDER BY `count_errors` DESC ) as OBJ_DESC_ERRORS
JOIN
(SELECT `metrics_event`.`object`, COUNT(`metrics_event`.`id`) AS `count_total` FROM `metrics_event`
INNER JOIN `metrics_session` ON (`metrics_event`.`session_id` = `metrics_session`.`id`)
WHERE (`metrics_session`.`training_id` = 4 AND NOT (`metrics_session`.`completed_at` IS NULL) )
GROUP BY `metrics_event`.`object` ORDER BY `count_total` DESC ) as OBJ_ERRORS
ON OBJ_DESC_ERRORS.object = OBJ_ERRORS.object
如您所见,我基本上运行了两次相同的查询。原因是我需要将 count_errors 分解为对象 + 描述的每个聚合,但我还需要 count_total 仅按对象聚合。这是我能想到的方式。现在我想知道这是否是我能做的最好的,或者是否可以进一步优化。
如果是这样,我不知道怎么做。谷歌搜索和搜索类似的主题很困难,因为优化任务取决于查询本身,所以这里的关键字对我没有多大帮助。
【问题讨论】:
标签: mysql sql query-optimization