0

以下は私が書いたクエリです。パフォーマンスをさらに改善できるかどうかを知りたがっています。誰か助けてください。

DELETE FROM GLOBAL_TEMP
WHERE EXISTS (
    SELECT GLOBAL_TEMP.ASSET_ID
    FROM  TEMP AEE
      WHERE GLOBAL_TEMP.ASSET_ID = AEE.ID_ASSET 
      AND   GLOBAL_TEMP.TYPE = 'abcdef'
      AND   AEE.id_temp_notation
    IN (SELECT ID FROM TEMP2 WHERE IS_DISPLAYABLE = 'N')
);
4

1 に答える 1

0

これはおそらくもう少し効率的です... in 句は join や exists に比べて遅くなる可能性があります..また、各値を検索する代わりに 1 を返します (値ではなく存在をチェックしているため)少し速くなる。

DELETE FROM GLOBAL_TEMP
WHERE EXISTS (
    SELECT 1
    FROM  TEMP AEE
    INNER JOIN temp2 t2
     on AEE.ID_temp_notation = t2.id
    WHERE GLOBAL_TEMP.ASSET_ID = AEE.ID_ASSET 
      AND GLOBAL_TEMP.TYPE = 'abcdef'
      and t2.is_Displayable='N');

ただし、特定のインデックス、完全なテーブル リレーションシップ、およびデータの量と実行計画を知らなくても、これは "IN" が通常遅いことに基づく "最善の推測" です。

于 2015-01-19T17:50:06.170 に答える