Oracle数据库中的高水位【转】

一、什么是高水位?

简单来说,数据库中的表就像一个水库,高水位就是这个水库历史上最高的水位。

二、高水位有什么危害?

高水位会导致对数据库的全表扫描变时间变长。Oracle数据库是用块来存储一个表里的数据,当不停地向一个表中插入数据时,Oracle会给表分配更多的块,高水位即是记录表的最后一个块,当使用delete语句删除数据时,高水位不会变,表还是占用了那么多空间,比如,某张表曾经有10万条数据,使用delete语句删除99999条数据,还剩下一条数据,再使用select *语句时,还是会扫描10万条数据占用的空间,导致select变慢。

三、怎么消除高水位

(1)对表进行MOVE操作:ALTER TABLE TABLE_NAME MOVE;。若表上存在索引,则记得重建索引。

(2)对表进行SHRINK SPACE操作:ALTER TABLE TABLE_NAME SHRINK SPACE;,注意,在执行该指令之前必须开启行移动:ALTER TABLE TABLE_NAME ENABLE ROW MOVEMENT;。该方法的优点是:在碎片整理结束后,表上相关的索引仍然有效,缺点是会产生大量的UNDO和REDO。

(3)复制要保留的数据到临时表T,DROP原表,然后RENAME临时表T为原表。

(4)exp/imp或expdp/impdp重构表。

(5)若表中没有数据则直接使用TRUNCATE来释放高水位。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容