1

クエリに NOT EXISTS 句を含む SQL を調整しようとしています。私のデータベースは Netezza です。NOT EXISTS を NOT IN に置き換えてみて、クエリ プランを調べました。実行時間はどちらも同じように見えます。誰か助けてくれませんか?いくつかの 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; 
4

2 に答える 2

1

参加を試みることはできますが、注意が必要な場合があります。2番目のテーブルで結合キーが一意でない場合、複数の行が作成される可能性があります。次のクエリがこれを処理します。

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
于 2012-05-03T14:52:02.573 に答える
1

JOIN を試すことができます:

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 は、既に持っているものと同じものを生成する可能性があります。

于 2012-05-03T13:57:46.017 に答える