SQL - 改进NOT EXISTS查询性能

Mel*_*sus 15 sql sql-server performance not-exists where-clause

有没有办法可以改善这种SQL查询性能:

INSERT
INTO ...
WHERE NOT EXISTS(Validation...)
Run Code Online (Sandbox Code Playgroud)

问题是当我的表中有很多数据(如数百万行)时,WHERE NOT EXISTS如果非常慢,则执行该子句.我必须进行此验证,因为我无法插入重复数据.

我使用SQLServer 2005

谢谢

cjk*_*cjk 12

确保您在索引列上进行搜索,而不管理这些列中的数据(如子字符串等)


Blo*_*ard 11

关闭我的头顶,你可以尝试这样的:

 TRUNCATE temptable
 INSERT INTO temptable ...
 INSERT INTO temptable ... 
 ...
 INSERT INTO realtable
 SELECT temptable.* FROM temptable
 LEFT JOIN realtable on realtable.key = temptable.key
 WHERE realtable.key is null
Run Code Online (Sandbox Code Playgroud)

  • 在我对一个包含数百万行的表的测试中,这是迄今为止最快的解决方案...OP的选项持续几分钟,接受的(ck的)答案持续几分钟,你的解决方案持续10秒(并且我正在使用正确的索引在所有解决方案中) (2认同)

Otá*_*cio 6

尝试用左外连接替换NOT EXISTS,它有时在大数据集中表现更好.

  • ávio,我不认为NOT EXISTS总是会导致表扫描.看到这篇文章:http://social.msdn.microsoft.com/Forums/en-US/transactsql/thread/582544fb-beda-46c0-befd-4b28b5c2cdee/ (2认同)