2010-08-11 123 views
28

我在Stack Overflow上看到了一篇類似的文章,但還不是很滿意。MySQL - 使用字符串作爲主鍵

比方說,我提供了一個Web服務。 http://foo.com/SERVICEID

SERVICEID是用於引用服務的唯一字符串ID(base64,lower/uppercase +數字),類似於URL縮短器服務爲URL生成ID的方式。

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

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

我正在使用MySQL,(目前使用MyISAM引擎,雖然我承認不瞭解所有的引擎差異)。

謝謝。我的目的

更新字符串實際上只是一個base62編碼的整數,因此主鍵是一個整數,因爲你不可能永遠超過BIGINT的規模它只是沒有太多的意義使用其他任何東西(對於我的特定用例)

回答

38

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

確定它在多數情況下會佔用比INT更多的空間,但在很多情況下,這是最合理的選擇,甚至可能會減少需要的列數,提高效率,避免需要有一個單獨的ID字段。

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

+0

謝謝,我非常肯定我不會有太大的區別,但是想從社區那裏聽說「那裏已經完成了」 – 2010-08-11 05:29:48

+5

注意:對於僅限ASCII碼的代碼而非真實的文字(例如哈希,base64,標準國家代碼等),使用'ascii_bin'排序規則可能是一個好主意。如果您使用基於utf-8的排序規則,則它將爲CHAR列而不是僅爲1的每個字符保留3或4個字節。 – thomasrutter 2015-08-12 01:10:31

+0

請勿在主鍵中使用國家代碼。 – displayname 2017-05-03 19:22:14

相關問題