首页 > 解决方案 > Oracle/RDBMS 增量查询引擎

问题描述

我不确定“增量”是否是正确的词。我将继续说明问题。

我有两个大表,X 和 Y。Z 是另一个表,它是 X 和 Y 的连接。

Create Table Z as 
select X.col1, X.col2, Y.col2, Y.col3 
from X 
join Y on X.id=Y.id"

现在,每当表 X 或 Y 中的任何值被更新时,我在 Z 中的数据都应该被刷新。有两种方法可以做到:

  1. 定期显式刷新表 Z。缺点是 1) 数据不会实时更新 2) 再次运行连接的刷新虽然只更改了一个字段,但会花费大量时间。

  2. 根据 X 和 Y 中的任何更改在表 Z 中进行增量更新。可能的好处是它是实时的并且不会花费太多时间来更新,因为只会更新相关的行。

我正在寻找有关如何为 Oracle 或任何其他数据库实施 2) 方法的任何帮助/指导?

标签: sqloraclejoinetl

解决方案


要将 Justin 和 Alex 的评论(和暗示的答案)转化为答案,您可能需要使用物化视图。如果您不熟悉它们,常规视图中的数据实际上并不存在,而只是从视图定义中的表中的数据返回,物化视图会创建数据的物理表示,并且该物化视图可以以多种方式刷新。我将表X和表Y(“基表”)之间的连接称为下表Z,但Z可能是表、视图或物化视图:

正如 Alex 所暗示的,您可能有不想使用物化视图的原因,所以让我提一些使用的常见原因:

  • 生成的物化视图会占用大量的物理磁盘空间;例如在加入大表时XY创建一个大表Z
  • 基表 X 和 Y 经常更新,并且表Z的访问频率不如基表更新的频率高

同样,以上是轻率的概括;您将需要测试各种选项。

物化视图而不是真实表Z或视图的优点Z包括:

  • 与从基表中获取数据的视图相比,对数据的快速访问
  • 物化视图可以按基于时间的计划刷新,或者在基表上的数据更改时刷新,或者根据请求刷新。由于您包含了标记,因此您可以在特定过程或作业运行后刷新物化视图。
  • 您可以在基表上创建物化视图日志,以进一步加快物化视图的刷新速度。
  • 如果对表的查询Z很频繁,则物化视图可能会比常规视图更快。

所以测试几种方法:你的前两种方法,一个常规视图和一个物化视图。如果表Z不需要基表中的大量列,则可以使用常规视图。如果连接条件产生少量行,则物化视图可能是最好的。

参考:


推荐阅读