1.從業務上來說
在設計數據庫時不需要費盡心思去考慮設置哪個字段為主鍵。然后是這些字段只是理論上是唯一的,例如使用圖書編號為主鍵,這個圖書編號只是理論上來說是唯一的,但實踐中可能會出現重復的 情況。所以還是設置一個與業務無關的自增ID作為主鍵,然后增加一個圖書編號的唯一性約束。
2.從技術上來說
如果表使用自增主鍵,那么每次插入新的記錄,記錄就會順序添加到當前索引節點的后續位置,當一頁寫滿,就會自動開辟一個新的頁。 總的來說就是可以提高查詢和插入的性能。
對InnoDB來說
1: 主鍵索引既存儲索引值,又在葉子節點中存儲行的數據,也就是說數據文件本身就是按照b+樹方式存放數據的。
2: 如果沒有定義主鍵,則會使用非空的UNIQUE鍵做主鍵 ; 如果沒有非空的UNIQUE鍵,則系統生成一個6字節的rowid做主鍵;
聚簇索引中,N行形成一個頁(一頁通常大小為16K)。如果碰到不規則數據插入時,為了保持B+樹的平衡,會造成頻繁的頁分裂和頁旋轉,插入速度比較慢。所以聚簇索引的主鍵值應盡量是連續增長的值,而不是隨機值(不要用隨機字符串或UUID)。
故對於InnoDB的主鍵,盡量用整型,而且是遞增的整型。這樣在存儲/查詢上都是非常高效的。