MySQL - 使用字符串作为主键

标签 mysql optimization primary-key-design

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

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

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

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

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

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

谢谢。

update 出于我的目的,该字符串实际上只是一个 base62 编码的整数,因此主键是一个整数,并且由于您不可能超过 bigint 的大小,所以它不会使用其他任何东西都太有意义了(对于我的特定用例)

最佳答案

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

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

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

关于MySQL - 使用字符串作为主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3455297/

相关文章:

php - mysql准备语句插入问题

php - Mysql条件案例查询——找出每个条件返回的行数

duplicates - 关于重复和区域服务器热点的 HBase 表键设计

database - 我可以使用优雅的配对功能作为数据库中的主键吗?

mysql - MySQL SELECT 中的合并列

mysql - 在 MySQL 数据库中加密存储数百封电子邮件?

ios - 如何使 [load on scroll] 不继续将图像添加到 ram?

c++ - 在C/C++结构中添加UNUSED元素会加快并减慢代码执行速度

mysql - 如何在不使用索引的情况下选择最后 N 行

MySQL。关系表中的主键。唯一 ID 或多个唯一键?