如何确定MySQL auto_increment步长

Vij*_*ati 6 mysql auto-increment

我有一个网页表,主键作为URL的哈希值,还有一个auto_increment ID列,它也是一个唯一键.

我有点困惑的是为什么连续插入不会将ID字段增加1.当我第一次创建表并执行单个插入时,第一个id为1.第二个插入生成,id为5和第三是8.

我在表上有一个触发器,在插入时,计算网页URL的哈希值.不确定这是否相关.

有间隙不是问题,但我想了解为什么连续插入不会生成步长为1的ID.

谢谢!

Bil*_*win 8

为什么会出现这种情况的几点建议:

请参见auto_increment_increment.每次在INSERT期间请求新值时,它都会控制增量.

此外,如果您在MySQL 5.1中使用InnoDB表,它们会优化auto-inc分配,以便在较短的时间内锁定表.这对于并发性很有用,但如果行的INSERT与另一个约束(例如辅助UNIQUE列或外键)冲突,它也会"丢失"auto-inc值.在这些情况下,分配的auto-inc值不会被推回到队列中,因为我们假设另一个并发线程可能已经分配了下一个auto-inc值.

当然也会发生回滚,在这种情况下,可以分配auto-inc值但丢弃.

  • 今年早些时候,我做了一些咨询,因为这个问题是因为32位整数主键中的值用完了.他们有一个辅助UNIQUE列,导致插入每1次成功失败1000次.因此,他们的auto-inc值增加了数百,而且数量越多,他们拥有的行数就越多(复制的机会就越多).我们不得不将ALTER TABLE更改为BIGINT的主键(以及30多个相关表中的外键列). (2认同)