小编典典

标识列增量值中的巨大间隙

sql

我创建了一个带有标识列的表。当我在该表中插入值时,“身份”列将显示两个值之间的巨大增量差距。标识值从6跳到10001。
这是我创建的表:

Create Table STG2.Department
(
    DepartmentID int GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1  Cycle),
    Name varchar(100),
    GroupName varchar(100)
)
PRIMARY INDEX (DepartmentID);

这就是我将值插入Department表的方式:

insert into STG2.Department (Name, GroupName)
    Select Distinct
        Department, GroupName 
    from DP_STG.HR;

我究竟做错了什么?


阅读 160

收藏
2021-04-15

共1个答案

小编典典

这个评论太长了。

我究竟做错了什么?

您在做错的事情是担心“身份”列中的空白。这些是使用数据库的自然部分。最典型的原因是由于delete或造成insert的。唯一的保证(我认为)是数字在增加,而不是重复。

在您的情况下,我的猜测是出于一些良好的原因,Teradata会保留大量数字-出于并行性或其他一些效率的考虑(我知道SQL
Server会这样做)。间隙不会造成任何伤害,插入件的顺序应保留得很好。

对于数据库,尤其是功能强大的并行数据库(例如Teradata),维护无缝标识列是 巨大的
开销。从本质上讲,这意味着每个插入都必须完成对表的所有查询,锁定表,找到最大值,再添加一个并使用该值。编写数据库的人知道这是什么性能杀手,并且对此类列的要求较宽松。

2021-04-15