我已经在Stack Overflow上看到了类似的帖子,但不太满意。
假设我提供了一项Web服务。 http://foo.com/SERVICEID
SERVICEID是用于引用服务的唯一字符串ID(基本64,大写/大写+数字),类似于URL缩短服务为URL生成ID的方式。
我理解比较字符串与整数存在固有的性能问题。
但我很好奇如何最大限度地优化String类型的主键。
我正在使用MySQL,(目前正在使用MyISAM引擎,但我承认并不了解所有引擎差异)。
感谢。
更新为了我的目的,字符串实际上只是一个base62编码的整数,所以主键是一个整数,因为你不可能超过bigint的大小,它只是不会使用其他任何东西的意义太大(对于我的特定用例)
答案 0 :(得分:42)
使用CHAR或VARCHAR作为主键没有任何问题。
在许多情况下,它肯定会占用比INT更多的空间,但在很多情况下它是最合理的选择,甚至可以减少所需的列数,从而避免需要提高效率有一个单独的ID字段。
例如,国家/地区代码或州名缩写已经有标准化的字符代码,这是使用基于字符的主键而不是为每个主键组成任意整数ID的一个很好的理由。
答案 1 :(得分:0)
如果外部标识为base64,则内部标识为二进制字符串。使用BINARY(n)
(如果是固定长度)或VARBINARY
(如果是可变长度)作为数据库中的键。二进制版本比base64版本短3/4。
只需在您的服务中将base64从/转换为base64。