Oracle 物化视图与 JPA 查询
Oracle materialized view vs JPA query
我的情况是,第三方在我们的模式域中准备了一个 table,我们 运行 不同的 spring 批处理作业寻找突变(给定第三方之间的差异table 和我们自己的 tables)。 table 平均将包含大约 20 万条记录。
我的问题很简单:与 运行 在 运行 时生成查询相比,预先生成 material 视图是否有任何好处?
由于第三方 table 将在我们的命令中填充(基本上它是一个设置为 1 的 db 布尔字段,之后调度程序选择它来填充 table。不要问我为什么它是这样完成的),查询需要 运行 无论如何。
显然,从应用程序的角度来看,查询平面 material 视图似乎性能更高。但是,我不确定是否有任何真正的性能优势,因为 material 视图需要在数据库级别构建。
谢谢。
此处物化视图的好处是,如果您多次 运行(如果查询开销大和/或基数大幅下降,则更是如此)。
如果您只查询一次,那么查询量不会很大。无论哪种方式,你都是 运行 相同的查询,你有插入物化视图的开销,但你也有好处,你可以比通过 JPA 查询更容易地调整它,并且可以应用压缩之类的东西,所以传输回应用程序的数据较少,但对于 20 万行,任何差异都可能很小。
总而言之,除非你运行同一个查询多次,否则我不会打扰。
更新
另一件需要考虑的事情是耦合。在 JPA 中直接引用物化视图将允许您在不更新应用程序的情况下更新任何逻辑,但另一方面是逻辑隐藏在应用程序之外,这会使调试变得很痛苦。
此外,如果您只是直接引用实体化视图而不使用任何查询重写或汇总功能,那么通过 CTAS
创建的简单 table 实际上会更好,因为您仍然拥有预先计算的数据没有维护物化视图的(小)开销。
我的情况是,第三方在我们的模式域中准备了一个 table,我们 运行 不同的 spring 批处理作业寻找突变(给定第三方之间的差异table 和我们自己的 tables)。 table 平均将包含大约 20 万条记录。
我的问题很简单:与 运行 在 运行 时生成查询相比,预先生成 material 视图是否有任何好处?
由于第三方 table 将在我们的命令中填充(基本上它是一个设置为 1 的 db 布尔字段,之后调度程序选择它来填充 table。不要问我为什么它是这样完成的),查询需要 运行 无论如何。
显然,从应用程序的角度来看,查询平面 material 视图似乎性能更高。但是,我不确定是否有任何真正的性能优势,因为 material 视图需要在数据库级别构建。
谢谢。
此处物化视图的好处是,如果您多次 运行(如果查询开销大和/或基数大幅下降,则更是如此)。
如果您只查询一次,那么查询量不会很大。无论哪种方式,你都是 运行 相同的查询,你有插入物化视图的开销,但你也有好处,你可以比通过 JPA 查询更容易地调整它,并且可以应用压缩之类的东西,所以传输回应用程序的数据较少,但对于 20 万行,任何差异都可能很小。
总而言之,除非你运行同一个查询多次,否则我不会打扰。
更新
另一件需要考虑的事情是耦合。在 JPA 中直接引用物化视图将允许您在不更新应用程序的情况下更新任何逻辑,但另一方面是逻辑隐藏在应用程序之外,这会使调试变得很痛苦。
此外,如果您只是直接引用实体化视图而不使用任何查询重写或汇总功能,那么通过 CTAS
创建的简单 table 实际上会更好,因为您仍然拥有预先计算的数据没有维护物化视图的(小)开销。