为什么Django / PostgreSQL在删除具有该主键的对象后不重用主键值?

时间:2013-11-19 21:18:53

标签: django postgresql primary-key

我正在试图找出为什么Django(或PostgreSQL,不确定它在哪个级别)不重用已被删除的对象的主键。创建对象时,它们都具有一个自动递增的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个呢?

1 个答案:

答案 0 :(得分:10)

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