This question already has an answer here:
PostgreSQL gapless sequences

(1个答案)


7年前关闭。




我试图弄清楚为什么Django(或PostgreSQL,不确定是哪个级别)不重用已删除对象的主键。创建对象时,它们都具有一个ID值,该ID值将自动递增并按数据库中的ID值排序。例如:

ID

5

4

3

2个

1个

假设我碰巧删除了ID为5的对象:

ID

4

3

2个

1个

创建新对象时,其ID为6:

ID

6

4

3

2个

1个

为什么没有将“5”指定为主键创建我刚刚创建的新对象?为什么它有6个呢?

最佳答案

分配的主键通常基于序列,因为它更容易存储和计算序列中的单个值和下一个值。考虑一个有100万条记录的表,并删除了其中的5万条记录。要填写新打开的键值,您必须使用内存来存储这些选项,或者扫描表以获取最低的打开值。与仅分配序列中的下一个值相比,两者都非常昂贵。

关于django - 在删除具有该主键的对象之后,为什么Django/PostgreSQL不重用主键值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20082256/

10-13 08:16
查看更多