我遇到了一个例子,我意识到NOT EXISTS子句正在加快查询的速度。
如果我们有一个表格测试(约500k记录)
CREATE TABLE Test
(
ID bigint
, Code varchar(20)
, AddedDate datetime
)
如果我想将结果数据插入临时表a
DECLARE @A TABLE
(
ID bigint
)
然后我们有以下三种情况:
1). 不受任何限制地插入所有数据
INSERT @A
SELECT dh.ID
FROM TEST dh
查询将在7-8秒内运行。
2). 使用不存在的代码添加“不存在”
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)快呢。