一般情况下在上篇文章的处理后,利用物化视图,已经能够解决复杂视图的
查询效率了,但是有时候数据量是在过大,且视图中使用了很多自定义的函数。
这两种情况单单是建物化视图也提升不了效率。
第一,数据量过大,物化视图的创建及其缓慢,而且由于由于是做数据接口,要求
物化视图的刷新机制需要全表更新,使用force(即能全表更新是就全表,不能是则更新增量)
以保证物化视图的数据的准确性。这就导致物化视图的刷新也很缓慢。
第二,由于有的数据是通过自定义的函数获取,而函数的执行也比较影响效率。
考虑到这两种情况,且实践证明物化视图的确很缓慢,200w数据建了一天还没建完,且导致Oracle
CPU占用率极高,服务器缓慢,故而停止了建物化视图,思考新的方案,后面在请教经理后构思了如下解决方案。
第一,视图中的数据来源于多张基表,可以建立一张表专门存多张基表的有效数据,这样可优化掉视图中的union all
第二,利用存储过程将基表的数据同步到新表,同步过程中只取满足条件的数据,降低数据量,减少where条件过滤。
第三,数据在新表中批量update相应需要使用函数的字段,直接将数据更新为目标值,优化掉函数在接口中的使用。
第四,在新表上建视图,该加索引的加索引。
第五,设置job每天执行存储过程。
具体实施过程中可以使用以下技巧调高效率:
第一,新表使用独立的表