爲什麼說InnoDB必須要有主鍵並且推薦使用自增整型主鍵呢?

1.InnoDB存儲引擎的數據結構必須需要一個主鍵纔可以組織起來,如果用戶使用InnoDB存儲引擎建立表的時候,沒有指定主鍵,則Mysql會自動的幫你找到一個合適的唯一索引作爲主鍵,若找不到符合條件唯一索引條件的字段時,會生成類似於ROW_ID的虛擬列充當該InnoDB表的主鍵;

2.整型的存儲比字段類型要小,而且應爲是InnoDB存儲引擎使用的是B+Tree數據結構,在進行查詢數據是需要對每個元素進行比較,而整型的對比效率是高於其他數據結構的,字符串等。


使用自增主鍵作爲InnoDB表的主鍵會存在一個問題?

Mysql中innodb_page_size = 16kb,選擇BIGINT作爲主鍵佔用8b,地址也佔8b 16kb/(8+8)b = 1000個元素,也就是1001階的B+Tree樹結構,那麼每次新增新增一條記錄都是在最右邊的數據中插入新的數據,當插入1001個元素時,發生列變生成一個新的根節點,而此時的左子節點包含的元素個數是(1001-1)/2=500,此後不會再發生改變,因爲每次插入的數據都是在整棵樹的最右側,以此類推會發現會有近乎一半的節點空間是浪費的。下圖是以7階的B+Tree示例:

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