Fra*_*o G 6 sql-server optimization hints materialized-view sql-server-2014
我有以下版本的 SQL Server:
Microsoft SQL Server 2014 (SP3) (KB4022619) - Windows NT 6.3 上的 12.0.6024.0 (X64) 企业版(64 位)(内部版本 9600:)(管理程序)
我创建了以下视图
CREATE VIEW [dbo].[vwGroupsOfficesDependencies]
WITH SCHEMABINDING
AS
SELECT GC.IdGroup, COUNT_BIG(*) AS countBig, OD.IdOffice
FROM dbo.Group AS GC INNER JOIN
dbo.GroupDependencies AS GD ON GC.IdGroup = GD.IdGroup INNER JOIN
dbo.OfficeDependencies AS OD ON OD.IdDependency = GD.IdDependency INNER JOIN
dbo.Dependencies AS D ON D.IdDependency = GD.IdDependency
WHERE (D.Active = 1)
GROUP BY GC.IdGroup, OD.IdOffice
Run Code Online (Sandbox Code Playgroud)
然后我创建了聚集索引
CREATE UNIQUE CLUSTERED INDEX [IX_vwGroupsOfficesDependencies_IdOficeIdGroup] ON [dbo].[vwGroupsOfficesDependencies]
(
[IdGroup] ASC,
[IdOffice] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
Run Code Online (Sandbox Code Playgroud)
但是当我运行查询时
SELECT IdGroup, IdOffice FROM dbo.[vwGroupsOfficesDependencies]
Run Code Online (Sandbox Code Playgroud)
我在执行计划中看到它不使用索引视图,它执行与视图内表的连接。但是,如果我包含 WITH(NOEXPAND) 提示,它将使用索引视图。我读到我必须为非企业版包含 WITH(NOEXPAND) ,但在我的情况下它不是必需的。为什么不使用 indexex 视图?
Pau*_*ite 14
除非使用NOEXPAND
提示,否则SQL Server总是在优化开始之前扩展对基础存储查询的视图引用。
稍后在优化过程中,它可能会选择将部分或整个计划匹配回一个或多个索引视图。
最初的扩展后来没有逆转有两个常见原因:
还有其他原因更喜欢NOEXPAND
提示。例如,只有在存在该提示时才会在索引视图上自动创建统计信息。有关更多信息,请参阅我的文章在企业版中使用 NOEXPAND 提示的另一个原因。
归档时间: |
|
查看次数: |
588 次 |
最近记录: |