posts - 75,comments - 83,trackbacks - 0

          我做的小實驗,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個字節
          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
          確實,發現刪除提交后,表大小仍然為8388608個字節個字節,并沒釋放,此時如果查詢該表記錄,雖然有記錄,但是和剛才沒記錄查詢一樣慢,這點在前面已經說過了。
          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
          驚奇的發現,大小仍然一樣
          SQL> select segment_name,bytes,tablespace_name from user_segments where segment_name='TEST';
          SEGMENT_NAME BYTES TABLESPACE_NAME
          ------------------------------- -----------------------------------------------------
          TEST 8388608 CDMA
          下面用另外一個方式來查看,show_space是顯示表詳細情況的過程
          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;
          刪除再次插入,仍然大小一樣,而且所有的細項都保持不變!
          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
          總結:delete是不能立即釋放空間,但是卻是可以被重用,也就是某個應用經常刪除再經常插入,并不會有太多的空塊!對于頻繁插入和更新的表,運行慢,不該懷疑是因為里面有太多空塊。
          posted on 2009-12-08 14:20 梓楓 閱讀(237) 評論(0)  編輯  收藏 所屬分類: oracle
          主站蜘蛛池模板: 太湖县| 达日县| 元江| 图木舒克市| 宁海县| 怀远县| 宁波市| 灵石县| 门头沟区| 谢通门县| 江津市| 日喀则市| 青岛市| 镶黄旗| 织金县| 泰兴市| 乌鲁木齐县| 大英县| 平乡县| 星子县| 广东省| 武定县| 河北区| 吉水县| 鹤峰县| 澄迈县| 江华| 屯门区| 九台市| 天镇县| 通州区| 叶城县| 错那县| 墨江| 武山县| 遵义县| 鄢陵县| 鸡东县| 宜君县| 永丰县| 台北市|