成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

被追著問UUID和自增ID做主鍵哪個好,為什么?

開發 前端
基于隨機數的 UUID 是根據隨機數或偽隨機數生成的。該版本的 UUID 使用隨機數生成器生成,保證了生成的 UUID 具有極佳的唯一性。然而,由于其基于隨機數,因此不太適用于數據量特別大的場景。

之前無意間看到群友討論到用什么做主鍵比較好

圖片圖片

圖片圖片

圖片圖片

其實 UUID 和自增主鍵 ID 是常用于數據庫主鍵的兩種方式,各自具有獨特的優缺點。

UUID

UUID 是一個由 128 位組成的唯一標識符,通常以字符串形式表示。它可以通過不同的算法生成,例如基于時間戳的 UUID(version 1)和基于隨機數的 UUID(version 4)等。

UUID 的優點

  • 全局唯一性:通過不同算法生成,幾乎能夠保證在全球范圍內的唯一性,從而避免了多臺機器之間可能發生的主鍵沖突問題。
  • 不可預測性:隨機生成的 UUID 很難被猜測,因此在需要保密性的應用場景下非常適用。
  • 分布式應用:由于可以在不同的機器上生成 UUID,因此可以被廣泛應用于分布式系統中。

然而,UUID 作為主鍵 ID 也存在一些缺點:

  • 存儲空間較大:UUID 通常以字符串形式存儲,占用的存儲空間較大。
  • 不適合范圍查詢:由于不是自增的,不支持范圍查詢。新生成的 UUID 可能會插入到已有數據的中間位置,導致范圍查詢時出現數據重復或漏數據的情況。
  • 不方便展示:UUID 通常比較長,且沒有明確的業務含義,因此不太適合在系統間或前臺頁面進行展示。
  • 查詢效率低下:

在 UUID 列上創建索引會導致索引大小增加,從而影響緩存命中率,增加磁盤 I/O 需求,同時也增加了查詢時的內存開銷。

當使用 UUID 進行排序時,新生成的 UUID 通常會插入到葉子節點的中間位置,導致 B+樹的頻繁分裂和平衡操作,進而影響查詢性能。

自增 ID

在 MySQL 中,可以通過設置 AUTO_INCREMENT 屬性實現 ID 的自增長,通常用于作為主鍵 ID。

使用自增 ID 作為主鍵的好處包括:

  • 存儲空間節省:ID 為數字,占用的位數比 UUID 小得多,因此在存儲空間上更加節省。
  • 查詢效率高:ID 遞增,利于 B+Tree 索引的查詢效率提高。
  • 方便展示:ID 較短,方便在系統間或前臺頁面進行展示。
  • 分頁方便:ID 連續自增,有利于解決深度分頁問題。

然而,使用自增主鍵也存在一些問題:

  • 分庫分表困難:在分庫分表時,無法依賴單一表的自增主鍵,可能導致沖突問題。
  • 可預測性:由于 ID 是順序自增的,因此具有一定可預測性,存在一定的安全風險。
  • 可能用盡:自增 ID 可能是 int、bigint 等,但它們都有范圍限制,可能會用盡。
  • 性能問題:在數據遷移期間,如果使用自增主鍵,數據庫可能會產生額外的性能開銷。這可能是由于重新計算主鍵值或更新相關索引所致。這可能會導致數據遷移過程變慢。

到底什么是 UUID,它能保證唯一嗎?

UUID(Universally Unique Identifier)是一種全局唯一標識符,用于在同一時空中的各臺機器上保證唯一性。

UUID 的生成基于特定算法,通常使用隨機數生成器或基于時間戳的方式。生成的 UUID 以 32 位 16 進制數表示,總共 128 位(標準 UUID 格式為:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,共 32 個字符)。

由于 UUID 是由 MAC 地址、時間戳、隨機數等信息生成的,因此具有極高的唯一性,幾乎不可能重復。但在實際實現中,UUID 有多種版本,它們的唯一性指標也有所不同。

UUID 的具體實現版本包括基于時間的 UUID V1 和基于隨機數的 UUID V4 等。

在 Java 中,java.util.UUID生成的 UUID 包括 V3 和 V4 兩種版本。

圖片圖片

UUID 的優缺點

UUID 的優點在于其性能較高,不依賴網絡,可以在本地生成,并且使用起來相對簡單。

然而,UUID 也存在兩個明顯的缺點:

  1. 長度過長:UUID 通常由 32 位 16 進制數字組成,因此長度較長。例如,對于類似"550e8400-e29b-41d4-a716-446655440000"的字符串,幾乎沒有任何程序員能夠直觀理解其含義。
  2. 缺乏含義:UUID 是隨機生成的,因此缺乏任何業務或語義上的含義。一旦將其用作全局唯一標識,可能導致在日后的問題排查和開發調試過程中遇到較大困難。

各個版本實現

  • V1. 基于時間戳的 UUID

基于時間戳的 UUID 是通過計算當前時間戳、隨機數和機器 MAC 地址得到的。由于算法中使用了 MAC 地址,這個版本的 UUID 能夠確保在全球范圍內的唯一性。然而,使用 MAC 地址也帶來了安全性問題,因此這個版本的 UUID 受到了批評。如果應用只在局域網中使用,也可以使用一種簡化的算法,以 IP 地址代替 MAC 地址。

  • V2. DCE(Distributed Computing Environment)安全的 UUID

這個版本的 UUID 算法與基于時間戳的 UUID 相同,但會將時間戳的前 4 位替換為 POSIX 的 UID 或 GID。然而,實際中較少使用這個版本的 UUID。

  • V3. 基于名稱空間的 UUID(MD5)

基于名稱空間的 UUID 通過計算名稱和名稱空間的 MD5 散列值得到。這個版本的 UUID 保證了以下幾點:在相同名稱空間中,不同名稱生成的 UUID 具有唯一性;不同名稱空間中的 UUID 是唯一的;在相同名稱空間中,相同名稱生成的 UUID 是重復的。

  • V4. 基于隨機數的 UUID

基于隨機數的 UUID 是根據隨機數或偽隨機數生成的。該版本的 UUID 使用隨機數生成器生成,保證了生成的 UUID 具有極佳的唯一性。然而,由于其基于隨機數,因此不太適用于數據量特別大的場景。

  • V5. 基于名稱空間的 UUID(SHA1)

與版本 3 的 UUID 算法相似,但使用 SHA1(Secure Hash Algorithm 1)算法進行散列值計算。

各版本 UUID 簡要總結如下:

Version 1 和 Version 2:

  • 基于時間戳和 MAC 地址,適合分布式計算環境,具有高度唯一性。

Version 3 和 Version 5:

  • 基于名稱空間,在一定范圍內是唯一的,可用于生成重復 UUID 的場景。

Version 4:

  • 簡單地基于隨機數生成,適合數據量不是特別大的場景,但可靠性較低。
責任編輯:武曉燕 來源: 碼上遇見你
相關推薦

2025-07-03 02:15:00

MySQLID+UUIDB+樹

2024-12-25 15:32:29

2024-10-24 09:22:30

2023-10-24 15:27:33

Mysql自增主鍵

2020-04-21 15:59:50

MySQL自增主鍵數據庫

2009-09-24 13:49:31

Hibernate自增

2020-08-31 11:20:53

MySQLuuidid

2023-12-26 01:09:28

MySQL存儲釋放鎖

2023-11-30 09:09:53

數據庫Java

2022-07-03 22:00:49

MySQL自增值數據

2022-06-03 08:12:52

InnoDB插入MySQL

2020-05-06 15:02:58

MySQL數據庫技術

2019-09-18 15:49:06

MySQL數據庫面試官

2022-11-08 19:30:52

DjangoID自增

2018-12-14 15:35:20

MySQL索引數據庫

2020-08-24 07:19:13

主鍵自增數據庫

2010-03-29 14:09:12

Oracle ID 自

2024-04-18 09:24:32

分布式ID分庫分表

2022-06-14 08:01:43

數據庫MySQL

2024-07-01 09:00:16

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美一级在线观看 | 91久久电影 | 不用播放器看的av | 在线天堂免费中文字幕视频 | 亚洲欧美日韩在线 | 欧美国产精品一区二区三区 | 一区二区免费在线观看 | 美女国内精品自产拍在线播放 | 日本免费黄色一级片 | 91香蕉| 亚洲国产网站 | 91精品久久久久久久99 | 免费视频一区二区三区在线观看 | 久久亚洲精品国产精品紫薇 | 国产精品日韩一区 | 美女国产一区 | 国产精品女人久久久 | 精品国产一区二区三区性色av | 成人国产精品久久 | 成人精品一区亚洲午夜久久久 | 日本在线视 | 久久久久久亚洲精品 | 最近最新中文字幕 | 青青草综合网 | 日韩三级在线 | 91视视频在线观看入口直接观看 | 超碰日本 | 国产精品免费一区二区三区四区 | 欧美大片久久久 | 欧美精品一区二区三区四区 | 日皮视频免费 | 欧美一级做a爰片免费视频 国产美女特级嫩嫩嫩bbb片 | 久久久精品网站 | 欧美激情一区二区三级高清视频 | 夜夜夜久久久 | 色视频网站| 亚洲一区二区三区在线观看免费 | 亚洲综合在线一区二区 | 91精品国产色综合久久不卡98 | 九九热免费看 | 欧美极品在线观看 |