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 梓楓 閱讀(244) 評論(0)  編輯  收藏 所屬分類: oracle
          主站蜘蛛池模板: 兴隆县| 吉木乃县| 章丘市| 北宁市| 乌拉特中旗| 浮梁县| 盐池县| 乐清市| 石柱| 五河县| 金堂县| 安溪县| 大足县| 余庆县| 宕昌县| 裕民县| 星座| 克什克腾旗| 玉林市| 赤壁市| 仙游县| 安丘市| 绍兴市| 张北县| 乐至县| 天峨县| 汝阳县| 屯留县| 南投市| 永州市| 霞浦县| 新乐市| 宜州市| 涿州市| 绥阳县| 长白| 海安县| 通山县| 龙里县| 泊头市| 宜春市|