2

我熟悉 SQL Server 索引视图(或 Oracle 物化视图),我们在 OLAP 应用程序中使用它们。它们具有非常酷的功能,即能够篡改执行计划并将其重新映射到索引视图而无需更改现有代码。

IE。假设我有一个非常昂贵的连接 SPROC。

SELECT [SOME COLUMNS]
FROM Table1 INNER JOIN Table2 [DETAILS]
INNER JOIN Table3 [BUNCH MORE JOINS] ...

如果我创建了一个包含类似结果集的索引视图,那么查询优化器很可能会将 SPROC 发送到我的索引视图,而不是基表,我会获得很大的性能提升。

现在说我想在OLTP 中使用索引视图!?我的意思是大多数 OLTP(比如这个站点)的阅读量相对较大,如果它们的连接成本很高,那么我们可以加快它们的速度并可能减少锁定争用(http://www.codinghorror.com/blog/archives/001166.html)。更好的是您不必更改任何代码,只需编写索引视图。

但这也意味着数据库变得更大,因为我们需要在索引视图中保留这些数据的副本......

有没有人使用过索引视图来解决 OLTP 中的争用或速度问题?我怎么从来没见过这个用的?

4

2 回答 2

5

物化视图可用于针对 OLTP 进行报告,尤其是在聚合大量行以获得结果时。空间要求完全取决于您节省了多少数据。将其视为缓存。

棘手的平衡在于报告需要多长时间的数据,以及您可以对 OLTP 性能造成多大影响。如果有些陈旧的数据是可以的,您可以在系统活动较少的时候安排对视图的更新。

有一次我不能,并且需要非常最新的数据,我最终使用了一些自定义开发。对基表的每次更新都会触发一个触发器,该触发器将记录写入事务表。该视图查看缓存的聚合,以及存储在事务表中的增量。在系统资源允许的情况下,事务作为增量事务应用于聚合表。这使我能够获得第二个数据、良好的报告性能(唯一发生的聚合是最近的事务)和数据库上的相当少的负载(每次写入的大小只会增加一倍,而不是每次都重新计算一个巨大的聚合)。

不幸的是,它维护起来很复杂,并且没有使用简单的内置工具。如果您可以等待报告数据,通常最好使用内置的物化视图并推迟刷新。

于 2008-10-07T14:20:04.360 回答
2

我们使用物化视图来加快我工作的速度。最常用于针对 OLTP 系统的报告。我们的许多报告都是从数据仓库运行的,但由于我们会在一夜之间刷新仓库,所以目前数据必须来自 OLTP 表。

于 2008-09-11T19:37:51.993 回答