日期:2014-05-19  浏览次数:20738 次

索引视图的索引问题~
一个索引视图,在对其进行select操作时,什么情况下会用到索引视图的索引,什么情况下会用到基表的索引,什么情况下不会使用任何索引?

请高手赐教!!

------解决方案--------------------
参考:
http://dev.csdn.net/article/61/61923.shtm
------解决方案--------------------
由优化器自己决定,联机丛书上有详细的解释

-------------------------------------------------
解析视图上的索引
Microsoft® SQL Server™ 2000 查询优化器确定给定查询是否能从使用数据库中定义的任何索引中获益。索引包括索引视图和基表索引。当满足下列条件时,SQL Server 查询优化器使用索引视图:

下列会话选项均设置为 ON:
ANSI_NULLS


ANSI_PADDING


ANSI_WARNINGS


ARITHABORT


CONCAT_NULL_YIELDS_NULL


QUOTED_IDENTIFIERS
NUMERIC_ROUNDABORT 会话选项设置为 OFF。


查询优化器查找视图索引列与查询中的元素之间的匹配部分,如:
WHERE 子句中的搜索条件谓词。


联接操作。


聚合函数。
估计的索引使用成本是查询优化器考虑使用的所有访问机制中的最低成本。
除 SET 选项的要求外,查询优化器使用上述规则确定表索引是否包含查询。查询中无须再指定其它选项以使用索引视图。

查询不必在 FROM 子句中显式引用索引视图,查询优化器即可使用该索引视图。如果查询所引用的基表中的列也同时存在于索引视图中,并且,查询优化器估计使用索引视图将提供最低成本的访问机制,则查询优化器会选择索引视图,其方式类似于当查询中不直接引用基表索引时选择基表索引。当视图中包含非查询所引用的列时,只要视图提供覆盖一个或多个查询所指定列的最低成本选项,查询优化器即可能选择该视图。

使用 EXPAND VIEWS 选项可防止使用视图索引进行查询。可使用 NOEXPAND 视图提示强制优化器使用在 FROM 子句中指定的索引视图上的索引。不过,建议让查询优化器动态地决定各查询使用的最佳访问方法。只在经测试证实 EXPAND 和 NOEXPAND 可显著提高性能的特定情形中使用它们。

EXPAND VIEWS 选项指定对于整个查询,查询优化器不应使用任何视图索引。

查询优化器不使用任何索引视图,除非在 FROM 子句中指定了视图。当查询优化器评估覆盖查询中所引用列的低成本方法时,它将忽略所有视图索引。


查询优化器将 FROM 子句中引用的索引视图视为标准视图。查询优化器将视图的逻辑纳入查询执行计划中,并从基表中动态生成结果集。查询优化器忽略在视图上定义的索引。
当指定视图为 NOEXPAND 时,查询优化器将考虑使用视图上定义的任何索引。通过在可选的 INDEX() 子句中指定 NOEXPAND,可强制查询优化器使用指定索引。只能为索引视图指定 NOEXPAND,而不能为还未建立索引的视图指定 NOEXPAND。