pgsql数据库怎么优化下面语句with issue as select cmm_idstring_aggl3_flag ; as l3_flagstring_aggcare_id ; as care_idstring_aggcare_name ; as care_namestring_aggump_id ; as issue_id from t_issue_track_summary_info
以下是优化建议:
-
索引优化:确保所有连接字段和过滤字段都有适当的索引。特别是,确保t_dts_collect表的is_deleted和version_id字段以及t_issue_track_summary_info表的deleted字段都有索引。
-
子查询优化:对于issue子查询,可以考虑将聚合函数移动到主查询中,使用LEFT JOIN连接来获取相关的聚合结果。这样可以避免不必要的子查询。
-
字符串拼接优化:使用数组聚合函数array_agg替代string_agg函数,这样可以更高效地进行字符串拼接。
优化后的语句如下:
WITH issue AS (
SELECT
cmm_id,
array_agg(l3_flag) AS l3_flag,
array_agg(care_id) AS care_id,
array_agg(care_name) AS care_name,
array_agg(ump_id) AS issue_id
FROM
t_issue_track_summary_info
WHERE
deleted IS NULL
GROUP BY
cmm_id
)
SELECT
collect.id,
COALESCE(issue.l3_flag, ARRAY['']) AS L3flag,
issue.care_id,
COALESCE(issue.care_name, ARRAY['']) AS CareName,
issue.issue_id,
collect.patch_plan,
collect.patch_id,
collect.cur_step,
collect.turns,
collect.cur_test,
...
FROM
t_dts_collect collect
LEFT JOIN
t_patch_info patch ON collect.patch_id = patch.id
LEFT JOIN
t_dts_details details ON collect.dts_biz_no = details.dts_biz_no
LEFT JOIN
t_dts_details details_parent ON details.parent_no = details_parent.dts_biz_no
LEFT JOIN
issue ON collect.dts_biz_no = issue.cmm_id
WHERE
collect.is_deleted = 0
AND collect.version_id = '23735486'
AND collect.patch_plan IN ('CP2118')
ORDER BY
details.create_time DESC
LIMIT 20
原文地址: http://www.cveoy.top/t/topic/iMpZ 著作权归作者所有。请勿转载和采集!