将IF EXIST(SELECT 1 FROM)更改为IF EXIST(SELECT TOP 1 FROM)有副作用
技术问答
228 人阅读
|
0 人回复
|
2023-09-14
|
我的生产服务器正在运行现有服务器SP。我发现通过 更改 IF EXIST(SELECT 1 FROM )为IF EXIST(SELECTTOP 1 1 FROM )和IF NOT EXIST(SELECT 1 FROM )能显著提高性能IF NOT EXIST(SELECT TOP1 1 FROM )。唯一的区别是 TOP 1关键词。我只想知道改变这种方法是否有副作用。
6 H3 F! D; i k/ o ; k+ }! Z" y6 N5 ]9 c$ P% M7 }
解决方案: ) O( T: ^+ P7 \+ s! |8 b* {
不,应该没有区别。EXISTS找到一个匹配的行后立即退出。这就是为什么它总是优于例如(select COUNT(*) from ...) >0-一个COUNT迫使被视为一切。
; F' R& }0 a ^; T- \; b5 C若创建以下四个查询:
9 Z) g3 _2 l9 ]% Cselect * from sys.objectsselect top 1 * from sys.objectsselect 1 where exists(select * from sys.objects)select 1 where exists(select top 1 * from sys.objects)并打开执行计划,您将看到第二个查询生成一个包含TOP操作符的执行计划。第三和第四查询产生 相同的 计划。将TOP被忽略。 |
|
|
|
|
|