mysql - 当我们有一个唯一的索引列时,我们是否应该存储一个自增ID

标签 mysql

我正在设计一个MySQL数据表来存储电子商务订单,每个订单都有一个唯一的订单号,类似于“20160223xxxxxx”,它是通过指定的算法生成的,以确保它在表中是唯一的。我想知道我们是否仍然需要一个自动增量字段作为表中的主键,因为我认为订单号似乎也可以作为主键。

最佳答案

您不需要需要一个自动递增的 ID,因为您有一个。然而,我非常喜欢合成主键:

  • 它们定义插入顺序,以便您知道哪些行最有效。
  • 对于外键索引来说,4 字节整数(如果您的表不是很大)比较长的字符串更有效。
  • 如果其中一个唯一订单 ID 发生更改,合成主键可以轻松更改该值。
  • 您不会受到订单 key 生成系统 future 变化的影响。
  • 如果你使用mysql,主键通常是聚集索引。因此,使用合成键插入到表的末尾——这是有效的。使用外部键插入可能会出现乱序——效率低下。

关于mysql - 当我们有一个唯一的索引列时,我们是否应该存储一个自增ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35568158/

相关文章:

php - MAMP - 所有 MySQL 查询返回 Null

mysql - 使用MySql函数变量作为查询中的表名

mysql - SQL语法;检查与您的 MariaDB 服务器版本相对应的手册,了解在第 1 行 '' 用户的 ORDER BY 'ID' ' 附近使用的正确语法

mysql - 如何提高对列求和的性能

mysql - 使用node.js从mysql查询大量数据时网页渲染失败

c# - MySQL根据日期时间插入

mysql - 如何在 Windows Vista 上备份我的 MySQL 数据库?

mysql - 具有多个连接的 SQL 查询,我正在添加更多

php - Strtotime 返回错误的时间值 - 自己增加 8 分钟?

mysql - ubuntu和mysql备份网络服务器的解决方案?