【问题标题】:What is the best primary key data type for big id?big id 的最佳主键数据类型是什么?
【发布时间】:2020-06-16 22:06:34
【问题描述】:

在 MySQL 中,我需要存储长度为 21(google 或 facebook uid)的主键,其大小比 int(最大值为 2147483647)和 BIGINT(最大值为 9223372036854775807)大得多,

我还阅读了有关 varchar 的信息,并意识到它的性能低下和 AUTO_INCREMENT 问题。

这种情况下最好的主键是什么?

【问题讨论】:

  • 为什么不创建自己的 ID(如果足够,则为 INT AUTO_INCREMENT)并为另一个具有足够长度的 VARCHAR 键保留第二列?
  • 这是一个很好的解决方案,但是我如何需要将这个id作为查询的主id,有什么办法吗?
  • 就像您使用任何其他搜索键一样(没有真正的区别)。像SELECT * FROM sometable WHERE google_id = :value 这样的东西。所有 FK 和其他查询仍然可以使用正常的数字 id 或任何其他所需的搜索条件。

标签: mysql sql


【解决方案1】:

为什么不直接使用numeric(21, 0)?这似乎准确地描述了您正在寻找的内容。

我不会说“varchar 性能低下”。更准确的是,较短的密钥更好,固定长度的密钥更好。因此,字符串作为索引的键并不是最佳的。不过,在需要的时候还是很合理的。

【讨论】:

  • 如果使用字符串进行 PK,您是否建议使用 CHAR 而不是 VARCHAR 以便它们始终是固定长度?
  • 只是为了观察问题被标记为 MySQL
  • @fubar 。 . .这将需要测试以了解 index 代码是否对键中使用的字符串类型敏感。
  • numeric 是 Oracle DB,我要的是 MySQL。
  • @Emarco 。 . .打扰一下? numeric/decimal 是几乎所有数据库中都可用的标准 SQL 类型:dev.mysql.com/doc/refman/8.0/en/fixed-point-types.html
猜你喜欢
  • 1970-01-01
  • 2023-04-09
  • 2020-08-18
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多