SQL优化 SELECT FROM PFQA_EXAMINE_EVALUATION pee LEFT JOIN PFQA_EVALUATION_APPRAISEE pea ON peeAPPRAISEE_ID = peaID LEFT JOIN PFQA_TEMPLATE_WEIGHT_GROUP ptwg ON ptwgNAME = peeWEIGHT_GROUP_NAME
这是一个使用了多个表连接的SQL查询语句,同时包含了子查询和多个条件筛选。
为了优化这个查询,可以考虑以下几点:
-
索引优化:确保相关的字段上有适当的索引,特别是在连接字段上创建索引,例如
pee.APPRAISEE_ID、ptwg.NAME、pee.WEIGHT_GROUP_NAME、peay.TEMPLATE_VERSION_ID、peay.id、pee.ACTIVITY_ID、pee.EXAMINER_ID、peae.EXAMINER_ID、peae.ACTIVITY_ID。 -
优化子查询:子查询
EXISTS语句中的条件可以进一步优化,确保所使用的字段上有适当的索引。 -
选择性投影:只选择需要的字段,而不是使用
SELECT *。这样可以减少数据传输和内存消耗。 -
考虑使用内连接:如果可能的话,将左连接改为内连接,以减少连接的数据量。
-
调整查询顺序:根据数据表的大小和索引情况,可以调整表的连接顺序,将过滤条件更加选择性的表放在前面。
综上所述,可以尝试优化的查询语句如下:
SELECT pee.*
FROM PFQA_EXAMINE_EVALUATION pee
INNER JOIN PFQA_EVALUATION_APPRAISEE pea ON pee.APPRAISEE_ID = pea.ID
INNER JOIN PFQA_TEMPLATE_WEIGHT_GROUP ptwg ON ptwg.NAME = pee.WEIGHT_GROUP_NAME
INNER JOIN PFQA_EVALUATION_ACTIVITY peay ON peay.TEMPLATE_VERSION_ID = ptwg.TEMPLATE_VERSION_ID
WHERE
pee.ACTIVITY_ID = 'c9a813d114e33a2f46f6b17861952a7b'
AND peay.id = 'c9a813d114e33a2f46f6b17861952a7b'
AND EXISTS (
SELECT 1
FROM PFQA_EXAMINER_ACTIV_EVALUATION peae
WHERE pee.EXAMINER_ID = peae.EXAMINER_ID
AND peae.ACTIVITY_ID = 'c9a813d114e33a2f46f6b17861952a7b'
AND peae.STATUS = 3
)
请注意,以上优化仅供参考,实际效果需要结合具体的数据库和数据表情况进行测试和调整
原文地址: https://www.cveoy.top/t/topic/iVVS 著作权归作者所有。请勿转载和采集!