首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Server性能提示

Server性能提示
EN

Stack Overflow用户
提问于 2011-02-17 18:17:00
回答 4查看 328关注 0票数 3

可能重复: 是否评估SQL子句短路?

关于这个问题,我有以下问题:

代码语言:javascript
运行
复制
select * from sometable 
where 1=1 or (select count(*) from table2 > 0)

如果第一个条件为真(1=1),Server是否仍然执行内部选择?还是在第一个条件为真时停止(如C)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-02-17 18:20:17

它在(1=1)为真时停止。您可以使用Ctrl然后Ctrl-E轻松地进行检查。

考虑一下这个查询

代码语言:javascript
运行
复制
select * from master..spt_values
where 1=1 or (select count(*) from master..sysobjects) > 0

执行计划只显示master..spt_values中的扫描,在sysobjects中不显示活动。

与C相反,当最左边的条件为真时,它不会停止,相反,查询优化器独立于表示的顺序计算出,这是计算成本最低的。在常量1 vs 1的情况下,赢家是明确的。

票数 7
EN

Stack Overflow用户

发布于 2011-02-17 18:23:40

这是短路,只是因为你在比较文字。优化器检测到这种微不足道的比较。

但是,如果您有强制参数化集,那么文字将更改为参数,并且Server处理的一般情况是,每一方可能是不同的。受强制参数化条件的限制.

票数 5
EN

Stack Overflow用户

发布于 2011-02-17 22:33:17

作为一般规则,Server不保证布尔运算符短路。。不要编写依赖布尔短路来获得性能或正确性的查询.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5032882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档