在Oracle數據的存儲中,可以把存儲空間想象為一個水庫,數據想象為水庫中的水。水庫中的水的位置有一條線叫做水位線,在Oracle中,這條線被稱為高水位線(High-warter mark, HWM)。在數據庫表剛建立的時候,由於沒有任何數據,所以這個時候水位線是空的,也就是說HWM為最低值。當插入了數據以后,高水位線就會上漲,但是這里也有一個特性,就是如果你采用delete語句刪除數據的話,數據雖然被刪除了,但是高水位線卻沒有降低,還是你剛才刪除數據以前那么高的水位。也就是說,這條高水位線在日常的增刪操作中只會上漲,不會下跌。
也就是說,高水位線不會因為 DELETE 操作而降低。
參考:https://zhidao.baidu.com/question/1495140752772864219.html
高水位並不會下降,隨之導致的是全表掃描的實際開銷並沒有任何減少。
delete數據是沒用的,即使數據刪除了,高水位的值也不會下降。
釋放表的高水位通常有如下幾種辦法:
(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來釋放高水位。