mysql自增主键用完

标签 mysql

我维护一个 ID 为 AUTO INCREMENT PRIMARY KEY 的表。当我删除一个条目并重新添加一个条目时,新条目不会采用前一个条目的 ID,而是再次递增 1。这是正常的吗?是否建议不要改变这种行为?我只是觉得这是在创建一个不可扩展的系统,因为它最终可能会用完索引。

最佳答案

这是设计使然,数百万个数据库都有像这样的带有整数键的主键。

如果您删除 90% 的插入,则在 4 亿行后您将用完键1)
如果你这样做,你可以做一个

ALTER TABLE `test`.`table1` MODIFY COLUMN `item_id` BIGINT UNSIGNED NOT NULL
, ROW_FORMAT = DYNAMIC;

item_id 列将是您的主键。
之后,您再也不用担心 key 空间不足。

不要试图从 bigint 主键开始!

  1. 这会使您的所有查询变慢。
  2. 它会让 table 变大。
  3. 在 InnoDB 上,主键包含在每个二级索引中,使小主键大大插入速度更快。
  4. 对于大多数表格,您永远不需要它。

如果您知道您的大表的行数将超过整数可以容纳的行数,那么一定要将其设为 bigint,但您应该只对真正需要它的表执行此操作。特别是在 InnoDB 表上。

不要使用 GUID,它只会浪费大量空间,在 99.99% 的情况下无缘无故地减慢一切。


1) 使用未签名!整数作为主键。

关于mysql自增主键用完,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6130672/

相关文章:

php mp3字符串错误

mysql - 触发值,调用表列并与文本连接

mysql - 如何根据mySql中的其他表更新字段值?

c# - MySql "SET @variable"在 C# 代码中抛出 fatal error

mysql - 在 My-Sql 上构建一个 pre-desc 行表以进行更快的搜索查询

php - 如何从函数中获取正确的最大 id 和最小 id?

mysql - 将带有 FOREIGN KEY 的表添加到 MySQL 数据库会导致 errno 150

javascript - 查询结果未定义

mysql - 我如何标准化我的数据库设计?

mysql - 与 RDS MySQL/Aurora 无服务器集群的 SSL 连接因 Node.js 而失败