我创建了一个带有标识列的表。当我在该表中插入值时,“身份”列将显示两个值之间的巨大增量差距。标识值从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表的方式:
Department
insert into STG2.Department (Name, GroupName) Select Distinct Department, GroupName from DP_STG.HR;
我究竟做错了什么?
这个评论太长了。
您在做错的事情是担心“身份”列中的空白。这些是使用数据库的自然部分。最典型的原因是由于delete或造成insert的。唯一的保证(我认为)是数字在增加,而不是重复。
delete
insert
在您的情况下,我的猜测是出于一些良好的原因,Teradata会保留大量数字-出于并行性或其他一些效率的考虑(我知道SQL Server会这样做)。间隙不会造成任何伤害,插入件的顺序应保留得很好。
对于数据库,尤其是功能强大的并行数据库(例如Teradata),维护无缝标识列是 巨大的 开销。从本质上讲,这意味着每个插入都必须完成对表的所有查询,锁定表,找到最大值,再添加一个并使用该值。编写数据库的人知道这是什么性能杀手,并且对此类列的要求较宽松。