关于数据量过大,且SQL已经不能再优化的视图的解决办法(二)

当面对数据量巨大且包含自定义函数的复杂视图时,单纯依赖物化视图可能无法有效提升查询效率。本文提出了替代方案:创建独立的有效数据表,通过存储过程筛选和更新数据,避免函数执行;为新表添加索引,并设置定时任务执行存储过程。此外,使用特定技巧如独立表空间、nologging模式、append模式和并行度来进一步优化效率。
摘要由CSDN通过智能技术生成

         一般情况下在上篇文章的处理后,利用物化视图,已经能够解决复杂视图的

查询效率了,但是有时候数据量是在过大,且视图中使用了很多自定义的函数。

这两种情况单单是建物化视图也提升不了效率。

    第一,数据量过大,物化视图的创建及其缓慢,而且由于由于是做数据接口,要求

物化视图的刷新机制需要全表更新,使用force(即能全表更新是就全表,不能是则更新增量)

以保证物化视图的数据的准确性。这就导致物化视图的刷新也很缓慢。

    第二,由于有的数据是通过自定义的函数获取,而函数的执行也比较影响效率。

考虑到这两种情况,且实践证明物化视图的确很缓慢,200w数据建了一天还没建完,且导致Oracle

CPU占用率极高,服务器缓慢,故而停止了建物化视图,思考新的方案,后面在请教经理后构思了如下解决方案。


第一,视图中的数据来源于多张基表,可以建立一张表专门存多张基表的有效数据,这样可优化掉视图中的union all

第二,利用存储过程将基表的数据同步到新表,同步过程中只取满足条件的数据,降低数据量,减少where条件过滤。

第三,数据在新表中批量update相应需要使用函数的字段,直接将数据更新为目标值,优化掉函数在接口中的使用。

第四,在新表上建视图,该加索引的加索引。

第五,设置job每天执行存储过程。

具体实施过程中可以使用以下技巧调高效率:

第一,新表使用独立的表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值