Jos*_*ose 3 performance view sql-server-2012 query-performance
我正在对这个缓慢的存储过程进行故障排除,在检查实际执行计划时,我注意到一个可能缺少索引的警告。仔细看看,它反对其中一个观点,而不是实际的表格。这怎么可能?
当然,物理表正在使用,但实际视图不是!
视图是这样的:
CREATE VIEW [ws].[MyVIEWTable]
WITH SCHEMABINDING
AS
SELECT col1, col2
FROM [dbo].[MyTable]
Run Code Online (Sandbox Code Playgroud)
为什么 SQL Server 引擎使用视图来检索数据而不是实际的物理表,在这种情况下是dbo.MyTable
?
所以它是一个索引视图——如果基表被引用并且索引视图可以(更好地)满足查询,SQL Server 可以自动选择使用索引视图。
来自MSDN(强调我的):
查询不必在 FROM 子句中显式引用索引视图,以便查询优化器使用索引视图。如果查询包含对也存在于索引视图中的基表中的列的引用,并且查询优化器估计使用索引视图提供最低成本的访问机制,则查询优化器选择索引视图 [...]
此外,如您所见,缺失索引算法可能会轻推您说:“嘿,何塞,如果您将此非聚集索引添加到索引视图中,我可能已经能够在视图上使用索引,这对于此查询,效率会更高。” 同样,即使在查询中没有明确提及视图,这种关联也可能发生。
通常,除非您在所有视图上都添加索引,因为您认为它们是一些神奇的性能银弹,否则访问索引视图将比访问基表更好,因为 - 同样通常 - 索引视图应该比它所基于的表。
归档时间: |
|
查看次数: |
598 次 |
最近记录: |