如何在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