打赏

SQL Server物化视图学习笔记

一、 基本知识  

摘抄自http://www.cnblogs.com/kissdodog/p/3385161.html

  SQL Server索引 - 索引(物化)视图 <第九篇>

索引视图实际上是一种将一组唯一值“物化”为群集索引形式的视图(白话是,给视图中的唯一值列加聚集索引,然后数据会存储在硬盘中),提高查询速度。

通过使用来自第一个索引的聚集键作为参考点,SQL Server还能在视图上建立额外的索引。

限制如下:

  1. 如果视图引用了任何用户自定义函数,那么这些函数也必须是模式绑定的;
  2. 视图不可以引用任何其他的视图-只能引用表和UDF;
  3. 在视图中引用的所有表和UDF必须采用两部分的命名约定(例如:dbo..Customers),并且也必须具有和视图相同的所有者;
  4. 视图和视图引用的所有对象必须在相同的数据库中;
  5. 在创建视图和所有底层表时,必须打开ANSI_NULLS以及QUOTED_IDENTIFIER选项;
  6. 视图引用的任何函数必须是确定的;

        7、必须要加上WITH SCHEMABINDING, 就是绑定到架构.

  8、创建完视图后, 必须紧跟着创建一个CLUSTERED聚集唯一索引,而且必须在第一列(第一列是唯一值,类似于主键那样).

  9、只支持两部分命名的表或UDF, 如 dbo.SalesOrder. 

10. 涉及到多个表连接时, 不支持left join 或right join的写法, 只能用from...where的方式或inner join的方式连接. (这一点有时很要命 只能用inner join太蛋疼)

11. 不支持table.*这种懒省事的方式, 得一个一个把想要的列写清楚.

--创建模式绑定视图

CREATE VIEW PersonAge_vw

WITH SCHEMABINDING

AS

SELECT Age,COUNT_BIG(*) AS CountAge FROM dbo.PersonTenMillion

GROUP BY Age

 

--为视图创建索引

CREATE UNIQUE CLUSTERED INDEX ivPersonAge

ON PersonAge_vw(Age)

SQL Server中的索引视图也具有查询重写的功能,

  所谓的查询重写,就是如果符合条件的数据在索引视图上,并且查询列都包含在在索引视图上,此时可以直接通过查询索引视图来替代基于原始表的查询。

如果物化视图上没有要查询的列,则物化视图无效。直接去表中查询。

二、  详细查看物化视图执行及维护原理

http://www.cnblogs.com/wy123/p/6041122.html

 

posted @ 2018-04-13 11:51  KiteRunner1988  阅读(3871)  评论(0编辑  收藏  举报