我维护一个 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 主键开始!
- 这会使您的所有查询变慢。
- 它会让 table 变大。
- 在 InnoDB 上,主键包含在每个二级索引中,使小主键大大插入速度更快。
- 对于大多数表格,您永远不需要它。
如果您知道您的大表的行数将超过整数可以容纳的行数,那么一定要将其设为 bigint,但您应该只对真正需要它的表执行此操作。特别是在 InnoDB 表上。
不要使用 GUID,它只会浪费大量空间,在 99.99% 的情况下无缘无故地减慢一切。
1) 使用未签名!整数作为主键。
关于mysql自增主键用完,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6130672/