NOT EXISTS改善了性能?

时间:2018-06-08 17:51:51

标签: sql-server-2008

我遇到了一个案例,我意识到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)快。

0 个答案:

没有答案