对于积分类型的主键,为什么避免间隙很重要?

时间:2010-03-29 02:27:46

标签: sql mysql indexing

我正在为表格生成代理键。由于我的hi / lo算法,每次重启/重启机器时,都可能出现间隙。

T1: current hi = 10000000 
    (sequence being dished out .. 1 to 100)
       Assume that current sequence is 10000050

T2: restart system.

T3: System gives out the next_hi as 10000100 
    (sequence being dished out now ranges from 101 to 200)

T4: Next request for a key returns 100001001

从主键或索引内部角度来看,为什么序列中没有间隙很重要?我要求这个更深入地了解mysql。

3 个答案:

答案 0 :(得分:4)

  

从主键或索引内部角度来看,为什么序列中没有间隙很重要?

这不重要 - 是什么导致你相信它? 主键的所有重要性在于它对表中的所有数据都是唯一的。无论值是什么,或者之前和之后的记录是否为顺序值都无关紧要。

答案 1 :(得分:2)

  

为什么序列中没有空隙是很​​重要的

这并不重要。差距很好。出于性能原因,可以容忍差距。

有用的是保证具有严格增加的序列(即序列具有与行创建时间相同的顺序)。但即使这样也不能保证在集群配置中(使用本地计数器缓存)。

答案 2 :(得分:1)

谁告诉你这个?代理键根本没有任何意义,因此不会有任何差距。什么是没有意义的东西的差距?我们使用UUID作为我们的键,如下所示: 6ba7b812-9dad-11d1-80b4-00c04fd430c8。什么是“下一个”关键?没有人知道,没有人关心。只要它是独一无二的,就可以了。