MySQL - 使用String作为主键

时间:2010-08-11 04:31:17

标签: mysql optimization primary-key-design

我已经在Stack Overflow上看到了类似的帖子,但不太满意。

假设我提供了一项Web服务。 http://foo.com/SERVICEID

SERVICEID是用于引用服务的唯一字符串ID(基本64,大写/大写+数字),类似于URL缩短服务为URL生成ID的方式。

我理解比较字符串与整数存在固有的性能问题。

但我很好奇如何最大限度地优化String类型的主键。

我正在使用MySQL,(目前正在使用MyISAM引擎,但我承认并不了解所有引擎差异)。

感谢。

更新为了我的目的,字符串实际上只是一个base62编码的整数,所以主键是一个整数,因为你不可能超过bigint的大小,它只是不会使用其他任何东西的意义太大(对于我的特定用例)

2 个答案:

答案 0 :(得分:42)

使用CHAR或VARCHAR作为主键没有任何问题。

在许多情况下,它肯定会占用比INT更多的空间,但在很多情况下它是最合理的选择,甚至可以减少所需的列数,从而避免需要提高效率有一个单独的ID字段。

例如,国家/地区代码或州名缩写已经有标准化的字符代码,这是使用基于字符的主键而不是为每个主键组成任意整数ID的一个很好的理由。

答案 1 :(得分:0)

如果外部标识为base64,则内部标识为二进制字符串。使用BINARY(n)(如果是固定长度)或VARBINARY(如果是可变长度)作为数据库中的键。二进制版本比base64版本短3/4。

只需在您的服务中将base64从/转换为base64。