Oracle 物化视图与 JPA 查询

Posted

技术标签:

【中文标题】Oracle 物化视图与 JPA 查询【英文标题】:Oracle materialized view vs JPA query 【发布时间】:2021-10-24 11:56:48 【问题描述】:

我的情况是第三方在我们的模式域中准备了一个表,我们在该表上运行不同的 spring 批处理作业来查找突变(给定的第三方表和我们自己的表之间的差异)。该表平均将包含大约 200k 条记录。

我的问题很简单:与在运行时运行查询相比,预先生成材料视图是否有任何好处? 由于第三方表将在我们的命令中填充(基本上它是一个设置为 1 的 db 布尔字段,之后调度程序将其拾取以填充表。不要问我为什么这样做),查询无论如何都需要运行。

显然,从应用程序的角度来看,查询平面材质视图似乎更高效。但是,我不确定是否有任何真正的性能优势,因为材料视图需要建立在 db 级别。

谢谢。

【问题讨论】:

MV 的好处可能是差异是唯一定义的。如果您让运行不同的春季批处理作业来寻找突变,那么他们每个人都有可能找到有点不同的东西。 【参考方案1】:

在这里,物化视图的好处是,如果您运行多次(如果查询很昂贵和/或基数大幅下降,则更是如此)。

如果您只点击一次查询,那么您的查询量就不会很大。无论哪种方式,您都在运行相同的查询,并且您有插入物化视图的开销,但您也有一个好处,即您可以比通过 JPA 查询更容易地调整它,并且可以应用压缩之类的东西,因此传输的数据更少回到应用程序,但对于 200k 行,任何差异都可能很小。

总而言之,除非您多次运行相同的查询,否则我不会打扰。

更新

要考虑的另一件事是耦合。直接在 JPA 中引用物化视图将允许您在不更新应用程序的情况下更新任何逻辑,但另一方面是逻辑隐藏在应用程序之外,这会使调试变得很痛苦。

此外,如果您只是直接引用物化视图而不使用任何查询重写或汇总功能,那么通过CTAS 创建的简单表实际上会更好,因为您仍然拥有预先计算的数据而没有(小)维护开销物化视图。

【讨论】:

感谢您的确认。我是这么想的。 添加了关于可能要考虑的其他事项的快速更新 正在读取的表没有更新,它是一个只读操作。但是感谢您的更新。

以上是关于Oracle 物化视图与 JPA 查询的主要内容,如果未能解决你的问题,请参考以下文章

oracle物化视图不会自动更新是怎么回事

PG 物化视图

物化视图 - Oracle

物化视图

Oracle 物化视图

Oracle - 子查询的物化视图