2010-08-11 747 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

相关问题