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