首頁  >  文章  >  資料庫  >  Mysql InnoDB為什麼要加入跟業務無關的自增主鍵

Mysql InnoDB為什麼要加入跟業務無關的自增主鍵

高洛峰
高洛峰原創
2016-12-02 13:26:131409瀏覽

在Mysql表設計中,通常會使用一個與業務無關的自增列做為主鍵。
這是因為Mysql預設使用B-Tree索引,你可以簡單理解為「排好序的快速尋找結構」。
如下是一個B-Tree的結構圖,2層B+樹,每個頁面的扇出為4;並有1到6五條記錄;上層記錄保存每個頁面的最小值;每個頁面透過雙向鍊錶鏈接起來的;

Mysql InnoDB為什麼要加入跟業務無關的自增主鍵當你插入記錄7時,就會發生頁面分裂:

Mysql InnoDB為什麼要加入跟業務無關的自增主鍵

如上可見分裂產生了記錄移動,但是優化後的分裂操作無需記錄移動:

​​

Mysql InnoDB為什麼要加入跟業務無關的自增主鍵

實作中,為每個索引頁面維護了一個上次插入的位置,以及上次的插入是遞增/遞減的標識。根據這些信息,InnoDB能夠判斷出新插入到頁面中的記錄,是否仍舊滿足遞增/遞減的約束,若滿足約束,則採用優化後的分裂策略;
所以建議使用一列順序遞增的ID 來作為主鍵,但不必是資料庫的autoincrement字段,只要滿足順序增加即可 。很多大型應用會有順序遞增的ID產生器。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn