设计索引视图的指导原则

如果很少更新基础数据,则索引视图的效果最佳。维护索引视图的成本可能高于维护表索引的成本。如果经常更新基础数据,则维护索引视图数据的成本可能超过使用索引视图所带来的性能收益。如果基础数据以批处理的形式定期更新,但在更新之间主要作为只读数据进行处理,请考虑在更新前删除所有索引视图,然后再重新生成。这样做可以提高更新的性能。

索引视图可以提高下列查询类型的性能:

  • 处理大量行的联接和聚合。
     
  • 许多查询经常执行的联接和聚合操作。
    例如,在记录库存的联机事务处理 (OLTP) 数据库中,许多查询都应联接 ProductMasterProductVendorVendorMaster 表。虽然执行此联接的每个查询需要处理的行可能并不多,但若将成百上千个这样的查询联接起来,则总的处理量将非常大。因为这些关系不太可能经常更新,所以可以通过定义一个索引视图存储联接结果,以此提高整个系统的总体性能。
     
  • 决策支持工作负荷。

    创建视图之前,请考虑下列基本原则:

    • 只能在当前数据库中创建视图。 但是,如果使用分布式查询定义视图,则新视图所引用的表和视图可以存在于其他数据库甚至其他服务器中。
       
    • 视图名称必须遵循标识符的规则,且对每个架构都必须唯一。 此外,该名称不得与该架构包含的任何表的名称相同。
       
    • 您可以对其他视图创建视图。Microsoft SQL Server 允许嵌套视图。但嵌套不得超过 32 层。 根据视图的复杂性及可用内存,视图嵌套的实际限制可能低于该值。
       
    • 不能将规则或 DEFAULT 定义与视图相关联。
       
    • 不能将 AFTER 触发器与视图相关联,只有 INSTEAD OF 触发器可以与之相关联。
       
    • 定义视图的查询不能包含 COMPUTE 子句、COMPUTE BY 子句或 INTO 关键字。
       
    • 定义视图的查询不能包含 ORDER BY 子句,除非在 SELECT 语句的选择列表中还有一个 TOP 子句。
       
    • 定义视图的查询不能包含指定查询提示的 OPTION 子句。
       
    • 定义视图的查询不能包含 TABLESAMPLE 子句。
       
    • 不能为视图定义全文索引定义。
       
    • 不能创建临时视图,也不能对临时表创建视图。
       
    • 不能删除参与到使用 SCHEMABINDING 子句创建的视图中的视图、表或函数,除非该视图已被删除或更改而不再具有架构绑定。 另外,如果对参与具有架构绑定的视图的表执行 ALTER TABLE 语句,而这些语句又会影响该视图的定义,则这些语句将会失败。
       
    • 如果未使用 SCHEMABINDING 子句创建视图,则对视图下影响视图定义的对象进行更改时,应运行 sp_refreshview。 否则,当查询视图时,可能会生成意外结果。
       
    • 尽管查询引用一个已配置全文索引的表时,视图定义可以包含全文查询,仍然不能对视图执行全文查询。
       
    • 下列情况下必须指定视图中每列的名称:
      • 视图中的任何列都是从算术表达式、内置函数或常量派生而来。
         
      • 视图中有两列或多列原应具有相同名称(通常由于视图定义包含联接,因此来自两个或多个不同表的列具有相同的名称)。
         
      • 希望为视图中的列指定一个与其源列不同的名称。 (也可以在视图中重命名列。) 无论重命名与否,视图列都会继承其源列的数据类型。
         
  • 相关文章:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

 
网站分类

基于 Z-Blog 1.8 Spirit Build 80710 [login]

Copyright LeadNT. Some Rights Reserved.