2017-09-07 81 views
1

我是相當新的SQL編程,和我有有兩列,UUID(32 CHAR獨特的hexstring)的表,和權限 (只是系統中的權限我正在使用,如'管理員'或'黑名單')。的MySQL採用了獨特的CHAR作爲主鍵

我對主鍵的概念並不是最大的,所以我想知道如果它的有效使用UUID作爲我的主鍵,考慮到它是100%獨特的沒有空白,我已經用它來容易地索引我的疑問。我不與任何和更可能永遠也不會加入該表,因此,它是有效使用UUID作爲我的主鍵沒有任何不可預見的後果是什麼?

回答

1

它是有效使用UUID作爲主鍵。它符合主鑰匙要求的兩個條件:

  • 它是獨一無二的。
  • 這是從來沒有空。

然而,這是一個壞主意。爲什麼? MySQL通過主鍵自動對數據進行羣集。也就是說,數據實際上是由主鍵排序的。 UUID不是順序的。插入可能發生在任何地方,需要移動數據。

我會推薦一個簡單的自動遞增的主密鑰並聲明該UUID是唯一的:

+1

或者你可以離開了主鍵完全,並宣佈UUID具有唯一性。 – Barmar

+0

@Barmar會在InnoDB中相同的效果。如果未定義主鍵,並且一個不可爲空的唯一鍵,則該唯一鍵將成爲聚簇索引。 –