一尘不染

自动增加主要的计数差距

mysql

我有一个带有自动递增主键的表。该表旨在存储数百万条记录,我现在不需要删除任何内容。问题是,当插入新行时,由于某些错误,自动增量键在自动增量ID中保留了一些间隙。例如,在5之后,下一个ID为8,而间隙为6和7
。结果是当我计算行数时,结果为28000,但最大id为58000。我没有删除任何内容。以及如何解决此问题。

PS我在插入记录时使用插入忽略,以便当我尝试在唯一列中插入重复项时不会出现错误。


阅读 194

收藏
2020-05-17

共1个答案

一尘不染

这是设计使然,将永远发生。

为什么?

让我们以两个正在执行INSERT的重叠事务为例

  • 事务1执行INSERT,获取值(比方说42),执行更多工作
  • 事务2执行INSERT,获取值43,执行更多工作

然后

  • 事务1失败。回滚。42未使用
  • 交易2完成43

如果保证了连续的值,则每笔交易都必须接连发生。伸缩性不是很好。

另请参阅“插入记录是否始终接收连续的标识值”(SQL
Server,但适用相同的原理)

2020-05-17