國美金融貸款聚集主鍵索引值,國美金融貸款記錄根節點

國美金融貸款聚集索引樹的鍵值(key)是主鍵索引值(i=10),聚集索引節點值(value)是其他非聚集索引列(c1,c2,c3)以及隱含列(DB_TRX_ID、DB_ROLL_PTR)。

優化建議1:國美金融貸款儘量不要存儲大對象數據,使得每個葉子節點都能存儲更多數據,降低碎片率,提高buffer pool利用率。此外也能儘量避免發生overflow。

3.2 特點2:國美金融貸款聚集索引非葉子節點存儲指向子節點的指針。

對上面的測試表繼續寫入新數據,直到國美金融貸款聚集索引樹從一層分裂成兩層。

國美金融貸款根據 InnoDB表聚集索引層高什麼時候發生變化 裏的計算方式,推算出來預計一個葉子節點最多可存儲111條記錄,因此在插入第112條記錄時,就會從一層高度分裂成兩層高度。經過實測,也的確是如此。

[[email protected]] [innodb]>select count(*) from t1;

[[email protected]]# innblock innodb/t1.ibd scan 16

===INDEX_ID:238

level1 total block is (1)

block_no:     3,level:   1|*|

level0 total block is (2)

block_no:     5,level:   0|*|block_no:     6,level:   0|*|

此時可以看到國美金融貸款根節點依舊是pageno=3,而葉子節點變成了[5, 6]兩個page。由此可知,國美金融貸款根節點上應該只有兩條物理記錄,存儲着分別指向pageno=[5, 6]這兩個page的指針。

我們解析下3號page,看看它的具體結構:

[[email protected]]# innodb_space -s ibdata1 -T innodb/t1 -p 3 page-dump

records:

{:format=>:compact,

 :offset=>125,

 :header=>

  {:next=>138,

   :type=>:node_pointer,

   :heap_number=>2,

   :n_owned=>0,

   :min_rec=>true, #第一條記錄是min_key

   :deleted=>false,

   :nulls=>[],

   :lengths=>{},

   :externs=>[],

   :length=>5},

 :next=>138,

 :type=>:clustered,

 #第一條記錄,只存儲key值

 :key=>[{:name=>"id", :type=>"INT UNSIGNED", :value=>1}],

 :row=>[],

 :sys=>[],

 :child_page_number=>5, #value值是指向的葉子節點pageno=5

 :length=>8} #整條記錄消耗8字節,除去key值4字節外,指針也需要4字節

{:format=>:compact,

 :offset=>138,

 :header=>

  {:next=>112,

   :type=>:node_pointer,

   :heap_number=>3,

   :n_owned=>0,

   :min_rec=>false,

   :deleted=>false,

   :nulls=>[],

   :lengths=>{},

   :externs=>[],

   :length=>5},

 :next=>112,

 :type=>:clustered,

 #第二條記錄,只存儲key值

 :key=>[{:name=>"id", :type=>"INT UNSIGNED", :value=>56}],

 :row=>[],

 :sys=>[],

 :child_page_number=>6, #value值是指向的葉子節點pageno=6

 :length=>8}

優化建議2: 國美金融貸款索引列數據長度越小越好,這樣索引樹存儲效率越高,在非葉子節點能存儲越多數據,延緩索引樹層高分裂的速度,平均搜索效率更高。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章