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個字節(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是顯示表詳細情況的過程
          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
          總結(jié):delete是不能立即釋放空間,但是卻是可以被重用,也就是某個應用經(jīng)常刪除再經(jīng)常插入,并不會有太多的空塊!對于頻繁插入和更新的表,運行慢,不該懷疑是因為里面有太多空塊。
          posted on 2009-12-08 14:20 梓楓 閱讀(244) 評論(0)  編輯  收藏 所屬分類: oracle
          主站蜘蛛池模板: 祁阳县| 新巴尔虎左旗| 策勒县| 乐昌市| 博乐市| 宣恩县| 正宁县| 广宁县| 高尔夫| 赣榆县| 满洲里市| 新邵县| 洪雅县| 丁青县| 密云县| 黄陵县| 额敏县| 沅陵县| 启东市| 抚顺市| 铜山县| 花莲县| 临泽县| 邛崃市| 浏阳市| 仁寿县| 高要市| 延吉市| 大连市| 耒阳市| 西青区| 泰安市| 依安县| 阳信县| 合作市| 林西县| 确山县| 林周县| 镇宁| 望都县| 青浦区|