以下是我写的查询,想知道我是否可以进一步提高性能。任何人都可以帮助我吗?
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')
);
答案 0 :(得分: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”的“最佳猜测”,通常很慢。