在SQL查询中调优NOT EXISTS的最佳方法

时间:2012-05-03 13:54:55

标签: sql performance netezza

我正在尝试调查查询中有NOT EXISTS子句的SQL.My数据库是Netezza。我尝试用NOT IN替换NOT EXISTS并查看查询计划。两者在执行时间看起来相似。可以有人帮助我关于这个?我正在尝试调整一些SQL查询。谢谢提前。

 SELECT   ETL_PRCS_DT, COUNT (*) TOTAL_PRGM_HOLD_DUE_TO_STATION
            FROM DEV_AM_EDS_1..AM_HOLD_TV_PROGRAM_INSTANCE D1
           WHERE NOT EXISTS (
                             SELECT *
                              FROM DEV_AM_EDS_1..AM_STATION
                              WHERE D1.STN_ID = STN_ID
                            ) 
 GROUP BY ETL_PRCS_DT; 

2 个答案:

答案 0 :(得分:1)

您可以尝试加入:

SELECT ETL_PRCS_DT, COUNT (*) TOTAL_PRGM_HOLD_DUE_TO_STATION
FROM DEV_AM_EDS_1..AM_HOLD_TV_PROGRAM_INSTANCE D1
LEFT JOIN DEV_AM_EDS_1..AM_STATION TAB2 ON D1.STN_ID = TAB2.STN_ID
WHERE TAB2.STN_ID IS NULL

尝试比较执行计划。 JOIN可能会产生与您已有的相同。

答案 1 :(得分:1)

您可以尝试加入,但有时需要小心。如果连接键在第二个表中不唯一,那么最终可能会有多行。以下查询解决了这个问题:

SELECT ETL_PRCS_DT, 
   COUNT (*) TOTAL_PRGM_HOLD_DUE_TO_STATION
FROM DEV_AM_EDS_1..AM_HOLD_TV_PROGRAM_INSTANCE D1 
left outer join
(
   select distinct STN_ID
   from DEV_AM_EDS_1..AM_STATION ams
) ams
  on d1.STN_ID = ams.STN_ID
WHERE ams.STN_ID is NULL