oracle多列為空與多列不為空的區別小示例

wisdomone1發表於2012-09-23
1,測試表的多列為空與多列為空字串的區別
  1,資料量是1000w
        declare
         type typ_tab_col1 is table of pls_integer index by pls_integer;
         typ_tab_col1_1 typ_tab_col1;
         
        begin
         for i in 1..10000000 loop
           typ_tab_col1_1(i):=i;
         end loop;
        
         forall i in 1..10000000
          insert into t_more_col values(typ_tab_col1_1(i),null,null,null,null,null,null,null,null,null);
         commit;
        end;
    2,列為10列
    3,插入
        1,空用時 已用時間:  00: 00: 19.59
        2,空字串用時 已用時間:  00: 01: 00.43
        3,小結:空比空字串插入更快 
    4,查詢
        1,在有資料的基礎上
        2,空時,查詢 已用時間:  00: 00: 00.31
        3,空字串時,查詢       已用時間:  00: 00: 00.45
        4,小結:說明查詢時空比空字串更快
        
    5,更新
      1,在有資料基礎上
      2,空時,已用時間:  00: 07: 45.56 update t_more_col set col1=20,col8=20;
      3,空字串時 已用時間:  00: 03: 18.40
      4,小結:說明空字串比空更新要快的
    6,刪除
      1,在有資料基礎上
      2,空時,delete from t_more_col where rownum<100000;已用時間:  00: 00: 00.62
      3,空字串時 已用時間:  00: 00: 00.54
        4,小結:說明空字串比空刪除快一些
    7,表的結構
      create table t_more_col(col1 int,col2 int,col3 int,col4 int,col5 int,col6 int,col7 int,col8 int,col9 int, col10 int);
        
    8,資料量
      1,空時,
        00:05:44 SQL> select segment_name,bytes/1024/1024 mb,segment_type from user_segm
          ents where segment_name='T_MORE_COL';
          
          SEGMENT_NAME
          --------------------------------------------------------------------------------
          
                  MB SEGMENT_TYPE
          ---------- ------------------
          T_MORE_COL
                 120 TABLE
     2,空字元時,
        
          SEGMENT_NAME
          -------------------------
          
                  MB SEGMENT_TYPE
          ---------- --------------
          T_MORE_COL
                 320 TABLE
     3,小結:很明顯,空比空字元佔用的儲存空間更少;

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

相關文章