在看某些文章中有寫到,oracle在塊中不會存儲空列。我自己試了一把,發(fā)現(xiàn)敘述有誤?,F(xiàn)在將我的實驗結(jié)果記錄以下。
先上結(jié)論:
1、對于空值列不是最后一個字段的oracle會存儲在塊中,dump出來的值是:
col? 0: *NULL*
col? 1: *NULL*
col? 2: [ 5]? c4 03 07 3a 34
col? 3: [ 7]? 54 52 49 47 47 45 52
col? 4: [ 5]? 56 41 4c 49 44
col? 5: [ 7]? 78 9b 0c 0a 01 12 3a
col? 6: [ 6]? 61 62 63 31 32 33
2、空值的列是最后一個列,那么將不會存儲在塊中
tl: 55 fb: --H-FL-- lb: 0x0? cc: 6《===這個有6個列
col? 0: *NULL*
col? 1: [24]
53 59 53 5f 49 4c 30 30 30 30 30 38 36 34 36 36 43 30 30 30 30 39 24 24
col? 2: [ 5]? c4 03 07 3a 2a
col? 3: [ 5]? 49 4e 44 45 58
col? 4: [ 5]? 56 41 4c 49 44
col? 5: [ 7]? 78 9b 0c 09 0f 12 3a
tab 0, row 1, @0x334
tl: 40 fb: --H-FL-- lb: 0x1? cc: 7《===這個有7個列,表一共有7個列,對比證明結(jié)論2
col? 0: *NULL*
col? 1: *NULL*
col? 2: [ 5]? c4 03 07 3a 34
col? 3: [ 7]? 54 52 49 47 47 45 52
col? 4: [ 5]? 56 41 4c 49 44
col? 5: [ 7]? 78 9b 0c 0a 01 12 3a
col? 6: [ 6]? 61 62 63 31 32 33
實驗方法
1、創(chuàng)建一個簡單的表
2、插入一些數(shù)據(jù)
3、update為空值或者''
4、dump數(shù)據(jù)塊
另外在實驗中也發(fā)現(xiàn),最后一個空值字段在update為非空并且commit后,不會立馬更改塊中的內(nèi)容,需要等待數(shù)據(jù)刷入磁盤后,才會在dump文件中發(fā)現(xiàn)多一個列出來。