uuid作為主鍵,還是用自增呢?

時間 2021-06-03 06:09:27

1樓:芬芳思密達

以Innodb為例,適合OLTP場景,B+數節點是以Page為單位儲存的。

題主說的問題主要從這幾個方面對比:

1. 按照MySQL5.7預設innodb_page_size為16k,非葉子節點主要儲存key和pointer,比如bigint做主鍵那麼key為8個位元組,pointer預設為6位元組,那麼乙個page頁最多可儲存16k/(8+6),如果uuid比如32位元組,那麼明顯非葉子節點儲存的資料變少了。

2. 對於葉子節點的話,聚簇索引是需要存資料的,一樣的道理,對於乙個page儲存的記錄就少了

3. B+數的葉子節點是有序,針對Range這種操作還是很有優勢的,如果是UUID會

導致大量的順序讀取變成隨機讀取,如果是機械硬碟那就悲劇了,當然SSD的隨機讀取影響不是很大

MySQL主要與硬碟是以Page為單位互動(當然這裡先不用考慮硬碟預讀的影響),既然每一頁的儲存的內容少了,那麼IO肯定就增加了,按照現在機械硬碟一次IO就算0.01s。

建議題主可以使用自增id作主鍵,uuid作二級索引,當然非聚簇索引(如果沒有觸發覆蓋索引)還是會增加一次回表查詢,考慮到一般B+樹的高度為2-3層,代價差不多為2-3次IO,就看怎麼取捨了;當然使用facebook的雪花演算法生成主鍵也是個不錯的選擇。

2樓:comix

自增的優點:

提高索引插入效能,innodb 在順序索引鍵的插入情況下能充分利用讀取頁的效率,以近似順序的方式寫入磁碟

自增的缺點

1,要維護維護自增鎖

2,對水平拆分不友好

3,業務不安全,比如輕易就能推斷出一段時間內的資料量

3樓:韓翔

看你要做什麼,自增效率高,但是不利於資料的離散,UUID效率低,但是資料離散化便於發布集群。另外還有很多業務因素。另外,其他支援比較好的資料庫,UUID效率會好一些,但是儲存空間還是會佔得厲害。

4樓:facert

講個不是效能方面的,如果是自增的,爬蟲拿到 api, 乙個 for 迴圈就可以把資料全部拿到了,uuid 會相對費勁些 /(ㄒoㄒ)/~~

5樓:簡朝陽

總體來說,一定是自增優於UUID。

目前使用的 MySQL 主要以InnoDB類儲存引擎為主,整個表的儲存其實很類似於乙個索引組織表。所有的其他B-Tree索引鍵上都需要儲存主鍵資訊,所以主鍵的字段大小會對所有的索引效能都造成較大影響。

而且UUID本身無序,這也會嚴重影響到InnoDB這類儲存結構的表的插入效能。當然,即使不是InnoDB,只是普通的B-Tree型別主鍵索引,同樣會因為主鍵插入位置處於索引的隨機位置,也會對插入效能造成影響。

而自增型別本身是有序的,所以插入的時候位置很容易找到新鍵值的插入位置。

6樓:fleuria

innodb 中的主鍵是聚簇索引,會把相鄰主鍵的資料安放在相鄰的物理儲存上。如果主鍵不是自增,而是隨機的,那麼頻繁的插入會使 innodb 頻繁地移動磁碟塊,而影響寫入效能。

7樓:沈詢

UUID好是好但是太大了,尤其是針對UUID做索引的時候。我們都推薦用bigint的數字id。

在我們DRDS的實踐中( 分布式關係型資料庫DRDS_水平拆分)的實現方式有比較多種,最高效能的亂序數字方案,和能夠保序的自增方案

8樓:郭麒

需要看你索引適應的形式,如果使用 b-tree 索引形式,有序 id 比無需 id 好,如果是 hash 索引,兩個差別不大。

主要原因是索引在磁碟上儲存的形式,常用的 b-tree 索引如果 id 是連續的,那麼資料儲存在相鄰的磁碟上,如果查詢和寫入操作的 id 連續,那麼減少隨機讀寫硬碟的機率,提公升讀寫效率。

所以看你的實際情況,如果你用的是 b-tree 索引,同時記錄比較多,那麼用有序 id 作為索引效率會高很多。具體情況題主可以自己測試一下,差距明顯。

9樓:林毅文

之前寫的一篇文章。 sharding 的id生成方式。 mac 時間原子自增。

10樓:Gary Chen

1、如果需要分庫分表,往往是海量資料,這個時候使用UUID不是乙個好的選擇。

2、主鍵一般情況下追求短整型,確定好你的整型型別。

PhotoShop 作為主要工具來製作電影能實現嗎?

林彬懋 這是 入攝影 的意義,與 入文字 的意義相同,也是鏈結 藝術與思想 的關鍵。何以故?因 藝 蓺 埶 原本就是同乙個字,而 埶 從坴從丮,意義不凡,因坴就是土,丮就是持,所以 持而種之 就是 埶 以之為用就是 藝術 以 術 本就著其所用,即 術 之意。這是當代藝術家都無法體認的 埶 的認知,不...

為何不將核電作為主要能源呢?

任我行 1.太貴。2.退役和乏燃料後處理都是無底洞,換一種角度,核電存在不能忽略的缺陷。核電存在的最大意義可能是養一批核工業從業人員。保住國家的核大國地位。 容我去看看 火電那麼多人咋辦?你養?國家養?建核電錢從哪來?我覺得國家現在的政策是有效的 引導人才流動,但人才好像不願去核電 自己領悟 現在的...

為什麼在時下windows作為主流作業系統的條件下,Hadoop卻要在linux系統上執行

許中 嚇了我一跳 最近怎麼又出了個新的winds作業系統我竟然不知道?老了老了!看看其他回答才明白,原來是windows啊。言歸正傳。首先hadoop是分布式程式設計框架,編出來的程式常常要在幾十台乃至上百臺機器上執行的,如果每台機器都執行windows,這得是多大的一筆開銷啊 windows商業授...