【发布时间】:2021-08-30 16:01:30
【问题描述】:
背景
大家好!
我最近了解到,在较新版本的 SQL Server 中,查询优化器可以“扩展” SQL 视图并利用内联性能优势。这可能会对我创建哪种类型的数据库对象以及创建它们的原因和时间产生一些重大影响,具体取决于何时实现这种增强的性能以及何时没有实现。
例如,我不会费心为一个非常大的事务表(性能非常重要)创建一个带有开始日期参数和结束日期参数的参数化内联表值函数调用查询底部的WHERE 语句,类似于
SELECT
Column1
FROM vw_Simple
WHERE
Column1 BETWEEN @SomeStartDate AND @SomeEndDate
并相信查询优化器会“扩展”视图并为我提供出色的执行计划。
注意:我说的是一个简单的、非嵌套的、非索引的 SQL Server 视图。类似的东西
CREATE VIEW vw_Simple
AS
SELECT
Column1
,Column2
FROM TableA
问题
我的问题是:了解查询优化器何时可以“扩展”SQL 视图以及何时不能的确切指南是什么?
我在微软官方文档中找不到这个答案。
到目前为止我发现了什么
查询优化器可以展开视图的情况:
- Stack Exchange post 声称,一般来说,查询优化器将扩展 SQL 视图。
查询优化器无法展开视图的情况:
- Predicate Pushing/Deferred Filtering - 但这已在 SQL Server 2008 中得到解决。
- Nested Views - 至少有时。
灰色地带
- Stack Overflow post's second answer 声称查询优化器可能会也可能不会扩展视图,具体取决于视图的复杂性和查询优化器的限制。
【问题讨论】:
-
对于它的价值,如果您右键单击查询并选择显示实际执行计划,SSMS 会显示实际执行计划。而且,如果查询优化器检测到它需要索引,它会告诉您它需要什么索引。
标签: sql sql-server view query-optimization sql-execution-plan