为SQL SERVER 正名 谁说我们没有物化视图_物化视图

一直大家有一个印象,SQL SERVER 没有物化视图,导致给开发人员和DBA 的概念中ORACLE 的物化视图高大上,SQL SERVER 则只能用着粗糙的传统的VIEW,以及缓慢的性能。

NO NO NO ,谁说的,不叫物化视图,不证明没有SQL SERVER 有INDEX VIEW ,这就是物化视图。 

首先为什么物化视图,比一般的VIEW 要高级。

试想如果你有1个表,然后在同一个时刻,有八个需求等着你,你需要和张大叔家的闺女吃个饭,然后同时刻你需要和李大婶家的儿子打个游戏,然后宋叔叔家里没人,你需要看一会他们家的熊孩子.........

你是不是累死了,如果这时候你要是有个 弟弟,妹妹什么的,替你干了这些活,你是不是就可以只取张大叔家了。

减少死锁和BLOCKED ,生成多个自定义化的替身,节省在查询时再生成数据的时间,让整个查询更快,这才是这个东西产生的理由和目的。

为SQL SERVER 正名 谁说我们没有物化视图_执行计划_02

SQL SERVER 中的INDEX  VIEW 的原理就是在建立VIEW的时候,对VIEW 进行建立 CLUSTER INDEX ,让这个VIEW 变成一个物理的表,并且你可以在这个 VIEW 上建立 多个二级索引,让VIEW 变为实体表,降低对可能对多个原始表,纠缠不清的关系。

说到这里,还是丑话说在前面,INDEX VIEW 建立也是要有条件的,这年月办什么事情不都要有些条件。

INDEX VIEW 不能做的

以下SQL 语句中不能有的

1 COUNT
2 OPENDATASOURCE  OPENQUERY  OPENROWSET 
3 LEFT RIGHT FULL JOIN 
4 SELECT *
5 DISTINCT 
6 TOP 
7 CUBE ROLLUP GROUPING SET
8 UNION
9 EXCEPT
10 INTERSECT
11 PIVOT
12 UNPIVOT
13 GROUP BY  HAVING

14 变动的条件

以上这些都不能再 INDEX VIEW 中存在,存在就不能建立SQL SERVER 的物化视图,马上有人就说 ORACLE 的物化视图没有那么多限制吧

呵呵,呵呵 ,呵呵, 百度一下吧,和SQL SERVER INDEX VIEW 相比, 半斤八两,可能在极个别的地方有优势。

其实用大脑想想,就知道不能生成物化视图的最根本的就是不能预测和变化,这是任何数据库系统都不能再这样的情况下运行的,大体 SQL SERVER 和 ORACLE 都是不能接受那些不能预测,复杂的变化在 INDEX VIEW 和 物化视图中发生的。

说了这么多,那怎么建立 SQL SERVER 的物化视图

把VIEW 变为  INDEX VIEW 需要两步

为SQL SERVER 正名 谁说我们没有物化视图_执行计划_03

2 上图在建立INDEX VIEW 不会报错,在第二步给VIEW 创建必要的 CLUSTERED INDEX 会报错,我们看看是什么错误

为SQL SERVER 正名 谁说我们没有物化视图_执行计划_04

这里解释一下,建立一个INDEX VIEW 是很简单的

  • Create the view by using the WITH SCHEMABINDING option.
  • Create the unique clustered index on the view.

为SQL SERVER 正名 谁说我们没有物化视图_SQL_05

去掉那些不确定的因素,让INDEX VIEW 可以以更清晰的逻辑去更新数据,与源表进行同步。

到底和普通的VIEW 有什么不同,第一个是使用了 INDEX VIEW 的视图,第二个是删除了从新建立不使用INDEX VIEW的视图走的执行计划,上面是走INDEX VIEW的执行计划,下面是普通VIEW 的执行计划,孰优孰劣 ARE YOU CLEAR?

为SQL SERVER 正名 谁说我们没有物化视图_SQL_06

为SQL SERVER 正名 谁说我们没有物化视图_物化视图_07

并且在INDEX VIEW 上还可以建立二级索引,继续加速INDEX VIEW的查询速度

为SQL SERVER 正名 谁说我们没有物化视图_执行计划_08

说到这里,重要的不是建立INDEX VIEW ,而是要考虑你是要一个复杂的VIEW 来一次性解决问题,还是要建立多个 INDEX VIEW 来解决问题的想法。

说到头,如果你的系统没有遇到瓶颈,你大可不必使用INDEX VIEW, 技术的演变,和需求都是一次一次的问题爆发和面临的极限。

有的人认为我为何一次不把他做好,可这世界的运行规律和价值平衡的规律很多时候,都是够用就好,这里不评论那种想法更好,更省时省力并能解决问题的就是好办法。

为SQL SERVER 正名 谁说我们没有物化视图_执行计划_09