可能重复:
Fragmentation of id's (auto_increment column) in mysql
我的数据库里有这个专栏。让我们假设它的名字是‘三重’。它包含给每个线程的唯一It以进行区分。
6 5 4 3 2 1
假设我删除了id 5和6的线程。
9 8 7 4 3 2
但是当删除后有一个提交时,给这个线程的唯一id是10。而不是5。我认为这是不整洁的。
如何在列中获得尽可能少的值?(在这种情况下,5.)
我认为我可以使用MIN()获得列的最小值,并保留+1,直到得到未使用的唯一值为止,但我认为这太复杂了。
有什么简单的方法吗?
谢谢。
发布于 2012-03-16 19:19:55
我同意其他人的意见,在实现自己的查找最小开放数是一个非常糟糕的想法。但是在我工作的地方,我们会得到一组封闭的数字,当一个数字被释放时,我们必须重新使用。
我们是怎么做到的。
我们不删除该行,而是设置每个列空的所有值,因此您要做的是选择min(id),其中columnA是空的,如果这返回了什么,我们就重用,否则,插入一个新的行。
发布于 2012-03-16 19:22:11
MySQL 4294967295中INT的最大数量--如果您每分钟创建1000个线程--每天需要1440000 (1000x60x24)id。大约8.17年后你就会用完身份证了。
BIGINT的最大数量为18446744073709551615,这足以为35 096年创建每分钟1000000000(10亿)个ids。
因此,您应该可以随意浪费ids,而不必担心它们。
发布于 2012-03-16 19:09:56
帮你自己个忙忘掉这件事吧。这将是一个巨大的痛苦实施,因此,除非有一个非常迫切的目标,这是不能接近的,否则(不可能),我们谈论的是巨大的痛苦,没有任何好处。
MySql本身不支持这个场景正是因为这个原因:巨大的复杂性而没有任何好处。
https://stackoverflow.com/questions/9743121
复制相似问题