oracle上亿表海量数据进行大批量数据删除有啥好的解决方案

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle上亿表海量数据进行大批量数据删除有啥好的解决方案相关的知识,希望对你有一定的参考价值。

以下纯属个人意见,请根据实际情况判断
(1)省下的数据量如果不大,那么可以考虑建立一张临时表,将需要保留的数据临时灌过去,然后truncate该表,然后再把数据灌回来。也可以考虑drop表,然后另外一张表改名,不过这样可能会有很多的后续操作,比如索引的建立等等,因此一般不用drop操作。
(2)上亿的数据,应该有分区吧,如果可能的话,按照分区truncate,这样也可以。
(3)实在不能truncate,只能delete那么建议找个字段循环删除提交,每次不能太多,最好保持在5万以下(根据实际情况具体判断),毕竟delete是最消耗资源的dml语句。
(4)如果可能的话,不要同一时间操作,分批操作,这样能减少一部分数据库负载压力(特别是undo)。
(5)一定要闲时操作,因为delete消耗资源比较多,会使数据库变慢。
参考技术A 如果是按时间删除,建议分区,然后truncate 分区表 参考技术B 如果是全表删除,就用truncate,
如果是行级删除,那最好对要查询的字段进行索引。本回答被提问者采纳

Oracle的极大数据量的分页查询问题

Oracle的分页查询在表中数据量极大时(上亿条、有索引),在第一次查询会出结果(3、5秒),而相同条件在第一次查询出结果立即再次进行查询时,会出现长时间等待也没有结果的情况(好像锁住了)。
请问如何解决,谢谢!

语句示例如下(数据行数cnt大约从几千、几万、十几万不等,都是同样的问题):
SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (select count(*) over() CNT,
ta.ca,ta.cb,ta.cc,... from ta where fname like 'test%' ORDER BY ta.ca
) A WHERE ROWNUM <= 15 ) WHERE RN >= 1

参考技术A 1.把星都换成需要的字段名试一下。
2.索引顺序排列正确(这个你查一下,索引不是建 了就可以。查询时有顺序的,四年前的项目,改变顺序后,时间由35s 提升到6-8s,具体的记不清了,只记得有这么回事。)

回去以后试一下你的SQL,只有数据多才出现这个问题吗?字段长度大约都多少?本回答被提问者采纳
参考技术B 相同条件在第一次查询出结果立即再次进行查询时
你第二次查询你查出来的结果集是去全表遍历查的 结果集是没有就是一推数据 上面没有索引没有任何东西,建议能先处理逻辑关系减少数据量 orderby 这些能不用就不用 like也会让index失效 用between可以代替
参考技术C 没法优化。查询条件中用了like子句,索引会不起作用,造成遍历整张表。
如果没有like及order by子句的话,会快很多
参考技术D 你这样做分页是全部查询后分页吗?为何不做成分页后查询?因为你只写了语句示例具体情况不是很了解。我们曾经做过一次查询后分页会使得页面刷新很慢,但调整后就相对快很多了。 第5个回答  2012-01-31 第一次能快速的出来结果,就说明了语句本身没有太大的问题。现在不明白你的第二次查询是一直都不出来结果,还是说能出来结果,但是结果出来的非常慢。

以上是关于oracle上亿表海量数据进行大批量数据删除有啥好的解决方案的主要内容,如果未能解决你的问题,请参考以下文章

oracle怎样导入海量数据(100万+)

网络爬虫抓取数据 有啥好的应用

使用dapper时动态拼接查询sql有啥好的方法吗

oracle 大数据量 删除插入 有啥影响

请问如何修改mdf ldf的数据~有啥好的软件~谢谢

有啥好的关系数据库教程吗? [关闭]