我做的小實驗,LZ參考看看
Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
Connected as ljb
SQL> drop table test;
Table dropped
SQL> create table test tablespace cdma as select * from dba_objects;
Table created
查看一下該表大小,為8388608個字節(jié)
SQL> select segment_name,bytes,tablespace_name from user_segments where segment_name='TEST';
SEGMENT_NAME BYTES TABLESPACE_NAME
------------------------------- -----------------------------------------------------
TEST 8388608 CDMA
SQL> delete from test;
62654 rows deleted
SQL> commit;
Commit complete
確實,發(fā)現(xiàn)刪除提交后,表大小仍然為8388608個字節(jié)個字節(jié),并沒釋放,此時如果查詢該表記錄,雖然有記錄,但是和剛才沒記錄查詢一樣慢,這點在前面已經(jīng)說過了。
SQL> select segment_name,bytes,tablespace_name from user_segments where segment_name='TEST';
SEGMENT_NAME BYTES TABLESPACE_NAME
------------------------------- -----------------------------------------------------
TEST 8388608 CDMA
?????????????????????????
那如果再次插入呢?是否空間大小是8388608的兩倍呢?
SQL> insert into test select * from dba_objects;
62654 rows inserted
SQL> commit;
Commit complete
驚奇的發(fā)現(xiàn),大小仍然一樣
SQL> select segment_name,bytes,tablespace_name from user_segments where segment_name='TEST';
SEGMENT_NAME BYTES TABLESPACE_NAME
------------------------------- -----------------------------------------------------
TEST 8388608 CDMA
下面用另外一個方式來查看,show_space是顯示表詳細(xì)情況的過程
SQL> set serverout on
SQL> exec show_space('TEST','auto');
Total Blocks............................1024
Total Bytes.............................8388608
Unused Blocks...........................125
Unused Bytes............................1024000
Last Used Ext FileId....................77
Last Used Ext BlockId...................820489
Last Used Block.........................3
PL/SQL procedure successfully completed
SQL> delete from test;
62654 rows deleted
SQL> commit;
刪除再次插入,仍然大小一樣,而且所有的細(xì)項都保持不變!
Commit complete
SQL> exec show_space('TEST','auto');
Total Blocks............................1024
Total Bytes.............................8388608
Unused Blocks...........................125
Unused Bytes............................1024000
Last Used Ext FileId....................77
Last Used Ext BlockId...................820489
Last Used Block.........................3
PL/SQL procedure successfully completed
總結(jié):delete是不能立即釋放空間,但是卻是可以被重用,也就是某個應(yīng)用經(jīng)常刪除再經(jīng)常插入,并不會有太多的空塊!對于頻繁插入和更新的表,運行慢,不該懷疑是因為里面有太多空塊。
posted on 2009-12-08 14:20
梓楓 閱讀(234)
評論(0) 編輯 收藏 所屬分類:
oracle