SQL Server 2005中的物化查询表

时间:2010-04-25 10:37:59

标签: sql-server sql-server-2005 db2 materialized-views

在DB2中,支持物化查询表(MQT)。基本上,您编写查询并创建MQT。但与View的区别在于查询是预先执行的,结果数据存储在MQT中,并且在使用基表刷新/同步MQT时有一些选项。

我想在SQL Server中使用相同的功能。 有没有办法达到同样的效果?

我有数百万行的表,我想在仪表板中显示摘要(如成员总数,总费用等)。因此,我不希望每次用户访问仪表板时计数,而是我想将它们存储在表中,我希望每晚刷新该表。

欢迎任何提示,答案,建议和想法。 感谢。

4 个答案:

答案 0 :(得分:2)

  

索引视图没有接缝   预执行查询并存储它   结果并没有给予刷新   选项。

但绝对确实如此!

“索引视图”是SQL Server中视图的实现 - 生成的数据被汇编并存储在磁盘上。因此,在这个意义上,查询是预先执行的。

不,你不需要在每个字段上编制索引 - 只是你在视图中添加聚簇索引这一事实(基于合适的列)实际存储结果数据到磁盘。在SQL Server中,聚集索引实际上是数据。

在SQL Server 2000联机丛书中查看此文章:Creating an Indexed View

微软明确写道:

在视图上创建唯一聚簇索引时,执行视图结果集以与表相同的方式存储在数据库中存储聚集索引。

答案 1 :(得分:1)

是的,看看这篇文章 http://msdn.microsoft.com/en-us/library/cc917715.aspx关于“索引视图”

并查看(WITH SCHEMABINDING)选项

答案 2 :(得分:1)

物化视图基于源表(或表),并在更新源表时立即更新其数据 。这是一个强大的功能,但基于之前帖子的讨论,它听起来并不像你想要或需要的那样。

做你想做的事的一个简单方法是:

  • 创建一个单独的表以包含聚合(汇总)数据
  • 编写一个进程(最好是存储过程)来计算和存储该数据
  • 确定启动此过程的方式和时间

汇总数据是否需要在特定时间(或“截至”)准备,例如上午12:01?如果是,请创建SQL代理作业并将其配置为在上午12:01启动该过程。总结数据是否只能在先前的例程或两个准备或完成前一天的数据后准备好?如果是这样,请在该过程结束时添加对汇总例程的调用。

(如何在DB2中对此进行配置?如何确定或配置何时刷新MQT?)

答案 3 :(得分:0)

您如何看待Replication,他们说几乎所有考虑复制数据报告的业务场景