我不确定“ incremental”是否是正确的词。我将继续说明问题。
我有两个大桌子,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中的数据都应刷新。有两种方法可以做到:
定期定期刷新表Z。缺点是1)数据没有实时更新2)重新运行联接的刷新花费了很多时间,尽管只更改了一个字段。
根据X和Y的任何变化在表Z中进行增量更新。可能的好处是它是实时的,不需要花费太多时间进行更新,因为仅会更新相关的行。
我正在寻找有关如何为Oracle或任何其他数据库实施2)方法的任何帮助/说明?
要将贾斯汀和亚历克斯的评论(和隐含答案)转变为答案,您可能希望使用实例化视图。如果您不熟悉它们,而常规视图中的数据实际上并不存在,而是从视图定义中的表中的数据返回而来,则物化视图将创建数据的物理表示,并且该物化视图可以以多种方式刷新。我将表X
和表Y
(“基本表”)之间的联接称为下面的表Z
,但Z
可能是表,视图或实例化视图:
正如亚历克斯所暗示的,您可能不想使用物化视图可能有某些原因,所以让我将一些常见原因not提到:
X
和Y
时会创建一个大表Z
Z
同样,以上是皮疹的概括;您将要测试各种选项。
实例化视图而不是实际表Z
或视图Z
的优点包括:
Z
,则实例化视图将[[可能比常规视图快。Z
不需要基本表中的许多列,则可以使用常规视图。如果联接条件产生的行数很少,则物化视图可能是最好的。参考: