mysql innodb為什么建議使用自增數字作為主鍵?


1.建議使用有序的自增ID作為主鍵

MySQL InnoDB 引擎底層數據結構是 B+ 樹,所謂的索引其實就是一顆 B+ 樹,一個表有多少個索引就會有多少顆 B+ 樹,mysql 中的數據都是按順序保存在 B+ 樹葉子節點上的(所以說索引本身是有序的)。

主要目的有三個:

  1. 提高范圍查詢效率;
  2. 增加排序效率;
  3. 提高掃表能力,順序訪問。

mysql 在底層又是以數據頁為單位來存儲數據的,一個數據頁大小默認為 16k,當然你也可以自定義大小,也就是說如果一個數據頁存滿了,mysql 就會去申請一個新的數據頁來存儲數據。

  • 如果主鍵為自增 id 的話,mysql 在寫滿一個數據頁的時候,直接申請另一個新數據頁接着寫就可以了。
  • 如果主鍵是非自增 id,為了確保索引有序,mysql 就需要將每次插入的數據都放到合適的位置上。

當往一個快滿或已滿的數據頁中插入數據時,新插入的數據會將數據頁寫滿,mysql 就需要申請新的數據頁,並且把上個數據頁中的部分數據挪到新的數據頁上。這就造成了頁分裂,這個大量移動數據的過程是會嚴重影響插入效率的。


2.在滿足業務需求的情況下,盡量使用占空間更小的主鍵

  • 主鍵占用空間越大,每個頁存儲的主鍵個數越少,路樹就越少,B+樹的深度會邊長,導致IO次數會變多。
  • 普通索引的葉子節點上保存的是主鍵 id 的值,如果主鍵 id 占空間較大的話,那將會成倍增加 mysql 空間占用大小。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM