一、什么是高水位?
简单来说,数据库中的表就像一个水库,高水位就是这个水库历史上最高的水位。
二、高水位有什么危害?
高水位会导致对数据库的全表扫描变时间变长。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来释放高水位。