一个索引视图,在对其进行select操作时,什么情况下会用到索引视图的索引,什么情况下会用到基表的索引,什么情况下不会使用任何索引?请高手赐教!!

解决方案 »

  1.   

    楼上没理解我的意思~不同的sql语句,有的时候会用到索引视图的索引,有的时候会用到基表(没用到索引视图)的索引,我的疑问就是在哪些情况下会出现这些情况呢?
      

  2.   

    参考:
    http://dev.csdn.net/article/61/61923.shtm
      

  3.   

    由优化器自己决定,联机丛书上有详细的解释-------------------------------------------------
    解析视图上的索引
    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。
      

  4.   

    找到需要的答案了,公布一下无须为优化器使用索引视图而特地在 FROM 子句中引用此索引视图。如果查询所引用的基表中的列也同时存在于索引视图中,并且,优化器估计使用索引视图将提供最低成本的访问机制,则优化器会选择索引视图,其方式类似于当查询中不直接引用基表索引时选择基表索引。当视图中包含非查询所引用的列时,只要视图提供覆盖一个或多个查询所指定列的最低成本选项,优化器即可能选择视图。使用 EXPAND VIEWS 选项可防止使用视图索引进行查询。可使用 NOEXPAND 视图提示强制优化器使用在 FROM 子句中指定的索引视图上的索引。但是,最好还是让优化器动态地确定每个查询应使用的最佳访问方法。当测试显示使用 EXPAND 和 NOEXPAND 能极大提高性能时才使用这两个选项。