[英]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.