我遇到了一个案例,我意识到NOT EXISTS子句正在更快地运行查询。
如果我们有一个表格测试(约有500k记录)
CREATE TABLE Test
(
ID bigint
, Code varchar(20)
, AddedDate datetime
)
如果我想将结果数据插入临时表A
DECLARE @A TABLE
(
ID bigint
)
然后我们有3个场景如下:
1)。无限制地插入所有数据
INSERT @A
SELECT dh.ID
FROM TEST dh
查询在7 - 8秒内运行。
2)。使用不存在的代码添加NOT EXISTS
INSERT @A
SELECT dh.ID
FROM TEST dh
WHERE NOT EXISTS (SELECT 1 FROM TEST d WHERE d.Code = 'bbbb')
查询在大约4秒内运行
3)。使用退出的代码添加NOT EXITS
INSERT @A
SELECT dh.ID
FROM TEST dh
WHERE NOT EXISTS (SELECT 1 FROM TEST d WHERE d.Code = 'AX8')
查询在0秒内运行。
3)的结果。有道理,因为内部查询有数据,NOT EXISTS将避免将结果插入@A
表中,因此在这种情况下时间将是最低的0秒。
但为什么2)跑得比1)快。