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 子句可能会很慢......还返回 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 回答