關於高水位線和delete

flysky0814發表於2007-11-28

因為oralce有一個HWM高水位,它是oracle的一個表使用空間最高水位線。當插入了資料以後,高水位線就會上漲,但是如果你採用delete語句刪除資料的話,資料雖然被刪除了,但是高水位線卻沒有降低,還是你剛才刪除資料以前那麼高的水位。除非使用truncate刪除資料。那麼,這條高水位線在日常的增刪操作中只會上漲,不會下跌,所以資料庫容量也只會上升,不會下降。而使用select語句查詢資料時,資料庫會掃描高水位線以下的資料塊,因為高水位線沒有變化,所以掃描的時間不會減少,所以才會出現使用delete刪除資料以後,查詢的速度還是和delete以前一樣。

解決方案:

1.首先匯出表,然後truncate這張表,最後匯入這張表。

2.在儲存空間當中移動表,但是由於rowid會被打亂,所以需要重建索引.

3.如果是oracle 10g.可是直接更新表的高水位線。

對應的SQL:

9i中:
create table aa_bak as select * from aa where record_time > sysdate - 10;
truncate table aa;
insert into aa select * from aa_bak;
drop table aa_bak;
10g 版本
alter tablename enable row movement;
alter tablename shrink space;
[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/11423276/viewspace-985464/,如需轉載,請註明出處,否則將追究法律責任。

相關文章