您的位置:首页 > 数据库 > Oracle

由于某种错误导致数据表数据巨大(千万级别),删除后对该数据操作速度极慢的原因及解决方法

2016-01-18 17:14 681 查看
有时,可能由于不经意的错误操作导致数据表数据极大,然后你就会试着将这部分数据删除或者直接delete整个表,进行恢复。但你会发现,即使后恢复后数据量和错误之前一样,但是操作起来(如count
(*))速度确是极慢,可能简单查询要四,五分钟!这是为啥呢?

本人就碰到过这样的情况。有一次在存储过程中死循环插入数据导致一个表有大量数据,有三千万,删除这些垃圾数据后,后再去操作这个表,速度就很慢很慢的。再对这个表操作(插入,查询)就好慢,select count(*)都要好5分钟。在此与大家分享。

这种问题是高水位线(HVM)导致的,错误的插入了很多数据,导致表数据块变多,高水位线变高,虽然你数据删了,但每次查询和删除需要扫描的块还是你误插入那么多。解决办法就是降低水位线。

有两种方法:

1,把表数据 备份一下, 然后把表truncate。注意是truncate而不是delete!

恢复即可。注意索引。

2,第二个也是推荐方法,不过仅适用于10g之后
---回收HWM(将多余的块、碎片整理、回收,降低HVM)
alter table &table shrink space;

若果数据库某些设置没设置好,如:row moving is notenable等就会报错。应先设置。

闲麻烦就直接用第一种即可。第二种是本质方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息