我需要创建一个带有一些条件的视图,然后我需要使用该视图,但对视图应用的条件与我在视图中已经应用的条件相同。这是我正在使用的一个特殊工具所必需的。
我的问题是: SQL Server优化器是否认识到同一条件应用了两次并消除了第二个条件?
示例:
create view ViewXYZ
as
select x, y, z
from tableXYZ
where x > 0 and y = 'blabla' and z = 1000创建视图时,我想这样使用它:
select x, y, z
from ViewXYZ
where x > 0 and y = 'blabla' and z = 1000发布于 2017-09-01 20:32:49
是,如果条件是deterministic。对于不确定的谓词,消除它们将是一个错误。
但这完全无关紧要。SQL性能来自访问路径(即索引),而不是来自表达式的求值。
发布于 2017-09-01 20:28:54
问题的答案是肯定的,它简单地接受视图的查询,然后对它们应用条件(在视图上给出),这意味着您给出了两次相同的条件,因此性能保持不变
发布于 2017-09-01 21:02:56
查询作为一个整体进行了优化,视图定义作为一种宏有效地扩展到外部查询中。
优化器能够识别矛盾-例如,声明X > 10 AND X < 5被优化为不执行表访问的WHERE子句,我希望优化器也能够识别两个谓词中较强的一个(例如,X > 10 AND X > 20应该忽略第一个谓词),但我不能指出任何关于这方面的具体文档。
还请记住,优化器尽可能地将谓词推入查询的最深处。因此,它们通常会在索引的查找/扫描期间免费发生,这无论如何都会招致(相对)较高的I/O成本。
https://stackoverflow.com/questions/46000245
复制相似问题