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 查询的主要内容,如果未能解决你的问题,请参考以下文章