为什么带有 CLUSTERED 索引的 VIEW 不使用该索引?

Dee*_*ain -3 sql-server optimization sql-server-2008-r2 materialized-view

我有一个视图,它有一个聚集索引和其他非聚集索引。

SELECT即使我选择了一个索引列,一个简单的查询也不使用任何索引。

这可能是什么原因?

我在 Windows NT 6.1 (Build 7600) 上使用 Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) 企业版

小智 11

解析视图上的索引

在 SQL Server Enterprise 中,查询优化器会自动考虑索引视图。要在标准版或数据中心版中使用索引视图,NOEXPAND必须使用表提示。

我猜你用的是标准版。

也许您违反了该页面上列出的其他规则,例如:

在查询优化器考虑的任何访问机制中,使用索引的估计成本是最低的。


与视图上的任何查询一样,查询中对视图的引用在优化之前被扩展到视图定义中。如果优化器在考虑将查询树与索引视图匹配之前找到了一种足够便宜的方式来满足查询,您将获得访问基表的计划。WITH (NOEXPAND)是保证优化器生成直接访问视图索引的唯一方法。