互聯網產品各表的主鍵(PK)設計

在多用戶、高併發的互聯網應用場景中,mysql數據庫表的主鍵(pk)怎麼設計更合理呢?可能的選擇:

UUID

UUID的生成和使用,請參閱:https://baike.baidu.com/item/UUID/5921266?fr=aladdin

優點:

  1. 好生成,容易保證唯一性(尤其全庫唯一性的應用場景)
  2. 有利於多用戶、高併發的寫操作性能提升
  3. 父子表事務insert數據時,子表容易得到parent_id,不需要額外的查詢等獲取方式,甚至該操作可以放到事務外部

缺點:

  1. 不利於閱讀和記憶
  2. 比int佔更多的空間,包括數據存儲空間、索引空間
  3. 沒有大小比較、順序的實際意義,innodb存儲中,頁中數據爲隨機存儲,讀取也爲隨機讀,較少能順序讀,對讀取性能有影響(隨機讀;拿一批數據時,可能需要讀取更多的頁數據)

 

自增id

優點:

  1. 好閱讀、好記憶
  2. 佔用空間少
  3. Innerdb存儲引擎中,該表數據會按照自增id大小順序,依次存儲,有利於讀操作的性能提升(更多的順序讀,裝載更少的頁)

缺點:

  1. 父子表事務insert數據時,子表得到父表的parent_id,麻煩一些,有些語言和框架可能還需要額外進行查詢,甚至有併發髒數據風險

 

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