为了优化这个 SQL 查询,可以考虑以下几点:

  1. 索引优化:确保表中的相关列(如 ID、NAME、TEMPLATE_TYPE_ID、TEMPLATE_CODE、STATUS、TENANT_ID)都有适当的索引。这将加速连接和过滤操作。

  2. 使用内连接:在这个查询中,使用内连接(INNER JOIN)而不是左连接(LEFT JOIN),因为 WHERE 子句中的条件会导致左连接的结果与内连接一样。

  3. 调整条件顺序:将更高选择性的条件放在 WHERE 子句的前面,以便尽早过滤掉不符合条件的行。在这个查询中,将 PTT.TENANT_ID = '0f0250c88fa3c5b4d643a1e101a7d336' 放在前面。

  4. 使用 EXISTS 子查询:考虑使用 EXISTS 子查询来代替 LEFT JOIN,特别是在关联的表中只需要判断是否存在相关记录时。这样可以避免连接所有的行。

综上所述,优化后的 SQL 查询可能如下所示:

SELECT DISTINCT PTTE.ID, PTTE.NAME
FROM PFQA_TEMPLATE_TYPE PTTE
INNER JOIN PFQA_EVALUATION_TEMPLATE PET ON PTTE.ID = PET.TEMPLATE_TYPE_ID
WHERE PET.STATUS = 1
AND EXISTS (
    SELECT 1
    FROM PFQA_TENANT_TEMPLATE PTT
    WHERE PET.TEMPLATE_CODE = PTT.TEMPLATE_CODE
    AND PTT.TENANT_ID = '0f0250c88fa3c5b4d643a1e101a7d336'
)

原文地址: https://www.cveoy.top/t/topic/o3q8 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录