回答

收藏

将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被忽略。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则