Mysql

是否值得索引 UUIDS 的 varchar(32) 列,其中一半 UUIDS 是 v1,一半是 v4?

  • December 31, 2014

我有一個包含數千萬行的 MySQL InnoDB 表。每行都有 uuid 列。它們儲存在標準 VARBINARY(16) 中。我最近被要求在這個 VARCHAR(32) 表中添加一列,用於儲存非虛線 UUID 十六進制。

在執行此操作時,我發現我們的 UUID 大約有一半是 v1,另一半是 v4。這意味著前半部分,由於它們都是在一台機器上生成的,隨機性有點缺乏(只有左字節時間戳不同)。另一方面,新的一半基本上是完全隨機的。

是否值得在此列上建立索引?如果是這樣,我正在努力決定該索引應該有多大(或者甚至可能是什麼類型的索引)。

v1 和 v4(或混合)UUID 都將為更快的 SELECT 建構良好的 B+ 樹索引。從規範化的角度來看,複製列是一個壞主意。但是如果我們把它放在一邊,任何 SELECT 都會從新索引中受益,並且對寫入的影響是可以接受的——為什麼不呢?

引用自:https://dba.stackexchange.com/questions/87294