首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sql Server优化器:视图内外的条件相同

Sql Server优化器:视图内外的条件相同
EN

Stack Overflow用户
提问于 2017-09-01 20:23:07
回答 3查看 85关注 0票数 1

我需要创建一个带有一些条件的视图,然后我需要使用该视图,但对视图应用的条件与我在视图中已经应用的条件相同。这是我正在使用的一个特殊工具所必需的。

我的问题是: SQL Server优化器是否认识到同一条件应用了两次并消除了第二个条件?

示例:

代码语言:javascript
复制
create view ViewXYZ 
as
    select x, y, z
    from tableXYZ
    where x > 0 and y = 'blabla' and z = 1000

创建视图时,我想这样使用它:

代码语言:javascript
复制
select x, y, z 
from ViewXYZ 
where x > 0 and y = 'blabla' and z = 1000
EN

回答 3

Stack Overflow用户

发布于 2017-09-01 20:32:49

是,如果条件是deterministic。对于不确定的谓词,消除它们将是一个错误。

但这完全无关紧要。SQL性能来自访问路径(即索引),而不是来自表达式的求值。

票数 3
EN

Stack Overflow用户

发布于 2017-09-01 20:28:54

问题的答案是肯定的,它简单地接受视图的查询,然后对它们应用条件(在视图上给出),这意味着您给出了两次相同的条件,因此性能保持不变

票数 1
EN

Stack Overflow用户

发布于 2017-09-01 21:02:56

查询作为一个整体进行了优化,视图定义作为一种宏有效地扩展到外部查询中。

优化器能够识别矛盾-例如,声明X > 10 AND X < 5被优化为不执行表访问的WHERE子句,我希望优化器也能够识别两个谓词中较强的一个(例如,X > 10 AND X > 20应该忽略第一个谓词),但我不能指出任何关于这方面的具体文档。

还请记住,优化器尽可能地将谓词推入查询的最深处。因此,它们通常会在索引的查找/扫描期间免费发生,这无论如何都会招致(相对)较高的I/O成本。

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

https://stackoverflow.com/questions/46000245

复制
相关文章

相似问题

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