簡體   English   中英

MySQL - 使用字符串作為主鍵

[英]MySQL - using String as Primary Key

我已經在 Stack Overflow 上看到過類似的帖子,但不是很滿意。

假設我提供了一個 Web 服務。 http://foo.com/SERVICEID

SERVICEID 是一個唯一的字符串 ID,用於引用服務(base 64,小寫/大寫 + 數字),類似於 URL 縮短服務為 URL 生成 ID 的方式。

我知道比較字符串與整數存在固有的性能問題。

但是我很好奇如何最大程度地優化String類型的主鍵。

我正在使用 MySQL,(目前正在使用 MyISAM 引擎,盡管我承認不了解所有引擎差異)。

謝謝。

出於我的目的更新字符串實際上只是一個 base62 編碼的整數,所以主鍵是一個整數,並且由於你不可能超過 bigint 的大小所以使用其他任何東西都沒有太大意義(對於我特定用例)

使用 CHAR 或 VARCHAR 作為主鍵沒有任何問題。

當然,在許多情況下,它會比 INT 占用更多空間,但在許多情況下,它是最合乎邏輯的選擇,甚至可以減少所需的列數,提高效率,避免需要一個單獨的 ID 字段。

例如,國家代碼或州縮寫已經有了標准化的字符代碼,這將是使用基於字符的主鍵而不是為每個另外組成任意整數 ID 的一個很好的理由。

如果您的外部 ID 是 base64,則您的內部 ID 是一個二進制字符串。 使用它作為數據庫中的鍵,類型為BINARY(n) (如果長度固定)或VARBINARY (如果長度可變)。 二進制版本比 base64 版本短 3/4。

只需在您的服務中從/向 base64 轉換。

使用字符串作為主列的類型不是一個好的方法,因為如果我們的值不能按順序生成並具有增量模式,這可能會導致數據庫碎片並降低數據庫性能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM