代码之家  ›  专栏  ›  技术社区  ›  Jamo

不存在可以提高性能吗?

  •  1
  • Jamo  · 技术社区  · 6 年前

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

    0 回复  |  直到 6 年前