如何在SQL Server中创build实体化视图?

我将要devise一个DW,我听说了物化视图。 其实我想创build一个视图,它应该在基表被改变时自动更新。 任何人都可以解释一个查询的例子..

他们被称为SQL Server中的索引视图 – 阅读这些白皮书的更多背景:

  • 创build索引视图
  • 使用SQL Server 2008索引视图提高性能

基本上,所有你需要做的是:

  • 创build一个定期的观点
  • 在该视图上创build一个聚集索引

你完成了!

棘手的部分是:该观点必须满足相当多的限制和限制 – 白皮书中概述了这些限制和限制。 如果你这样做 – 这就是全部。 该视图正在自动更新,无需维护。

其他资源:

  • 在SQL Server中创build和优化视图
  • SQL Server索引视图

尽pipe纯粹从工程学的angular度来看,索引视图听起来像每个人都可以用来提高性能的东西,但现实生活中的场景是非常不同的。 我一直不成功的是使用索引视图,我最需要他们,因为太多的限制什么可以索引,什么不能。

如果在视图中有外连接,则不能使用它们。 另外,不允许使用公用表expression式。实际上,如果在子查询或派生表中有任何sorting(例如使用分区依据子句),那么您也是不幸的。

这只留下了非常简单的情况下使用索引视图,在我看来,可以通过在底层表创build适当的索引来优化。

我会很高兴听到一些真实的情景,人们实际上已经使用了索引视图来获得它们的好处,没有它们是不可能完成的

实际上,您可能需要更多的背景资料。 在Oracle中,当您尝试在别处构build它时,这些对象由许多元素组成。

MVIEW本质上是来自另一个来源的数据的快照。 与视图不同,查询视图时未find数据,它以本地forms存储在表格中。 MVIEW使用后台程序进行刷新,该程序会定期启动或源数据更改。 Oracle允许全面或部分刷新。

在SQL Server中,我将使用以下来定期创build一个基本的MVIEW来(完成)刷新。

首先,一个观点。 这应该是最容易的,因为视图在任何数据库中是相当常见的下一个表格。 这应该与列和数据中的视图相同。 这将存储视图数据的快照。 然后,截断表的过程,并基于视图中的当前数据重新加载它。 最后,一个触发程序开始工作的工作。

其他一切都是实验。

当索引视图不是一个选项,并且不需要快速更新时,您可以创build一个黑客caching表:

 select * into cachetablename from myviewname alter table cachetablename add primary key (columns) -- OR alter table cachetablename add rid bigint identity primary key create index... 

然后使用sp_rename view / table或更改引用它的任何查询或其他视图来指向caching表。

安排每日/每晚/每周/什么都不刷新

 begin transaction truncate table cachetablename insert into cachetablename select * from viewname commit transaction 

注意:这会吃掉空间,也是在你的TX日志里。 最适合计算速度慢的小数据集。 也许重构首先消除“简单但大”的列到外部视图。

对于MS T-SQL Server,我build议用“include”语句创build一个索引。 唯一性不是必需的,与聚集索引相关联的数据的物理sorting也不是必需的。 “Index … Include()”创build一个由系统自动维护的单独的物理数据存储。 它在概念上与Oracle物化视图非常相似。

https://msdn.microsoft.com/en-us/library/ms190806.aspx

https://technet.microsoft.com/en-us/library/ms189607(v=sql.105).aspx

Interesting Posts