sql使用EXISTS子查询优化并给出sql语句SELECT DISTINCT PEAID PEANAME FROM PFQA_EVALUATION_ACTIVITY pea inner JOIN PFQA_EXAMINER_ACTIV_EVALUATION peae ON PEAEACTIVITY_ID = peaID inner JOIN PFQA
为了优化这个查询,我们可以考虑以下几点:
-
在子查询中使用EXISTS而不是IN:使用EXISTS比使用IN子查询更有效率,因为EXISTS只需要找到一个匹配项就会停止搜索,而IN子查询需要找到所有匹配项。
-
添加索引:为了加快查询速度,我们可以为相关的列添加索引。可以考虑为PEER.ID、PEE.EXAMINER_ID、PEE.IS_EFFECTIVE、PEE.IS_ABSTENTION添加索引。
下面是优化后的SQL语句:
SELECT DISTINCT PEA.ID, PEA.NAME FROM PFQA_EVALUATION_ACTIVITY pea INNER JOIN PFQA_EXAMINER_ACTIV_EVALUATION peae ON PEAE.ACTIVITY_ID = pea.ID INNER JOIN PFQA_EVALUATION_EXAMINER peer ON PEER.ID = peae.EXAMINER_ID INNER JOIN PFQA_TEMPLATE_VERSION ptv ON PTV.ID = pea.TEMPLATE_VERSION_ID INNER JOIN PFQA_EVALUATION_TEMPLATE pet ON pet.TEMPLATE_CODE = ptv.TEMPLATE_CODE WHERE PEER.EMP_CODE = #{empCode} AND PEA.STATUS = 'progress' AND PEA.IS_DELETE = '0' AND PEAE.STATUS != 3 AND pet.TEMPLATE_TYPE_ID = #{templateTypeId} AND EXISTS( SELECT 1 FROM PFQA_EXAMINE_EVALUATION pee WHERE pee.EXAMINER_ID = peer.ID AND pee.IS_EFFECTIVE = 1 AND PEE.IS_ABSTENTION = 0
原文地址: http://www.cveoy.top/t/topic/ioyE 著作权归作者所有。请勿转载和采集!