Sql Teradata在不同时间段插入记录时以不同范围为起点的自动增量列
我们有一个表,其自动增量列定义如下:Sql Teradata在不同时间段插入记录时以不同范围为起点的自动增量列,sql,auto-increment,teradata,Sql,Auto Increment,Teradata,我们有一个表,其自动增量列定义如下: Col1 BIGINT NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 1 INCREMENT BY 1 MINVALUE -999999999999999999 MAXVALUE 999999999999999999 NO CYCLE), 现在,当我们第一次插入49条记录时,这个Col1的值是100001到1
Col1 BIGINT NOT NULL GENERATED BY DEFAULT AS IDENTITY
(START WITH 1
INCREMENT BY 1
MINVALUE -999999999999999999
MAXVALUE 999999999999999999
NO CYCLE),
现在,当我们第一次插入49条记录时,这个Col1的值是100001到100049,而不是从1开始。对于下一个小时的插入,值为200001到200049。等等第9小时后,需要1000001到1000049个值
Teradata中的自动增量是如何工作的?它是否在内存中与其他表中的其他自动增量列共享
为什么它不是从1开始,在下一次插入时一直递增1?如何解决此问题?标识不是单个序列,这将成为并行数据库系统中的瓶颈。事实上,每个表都有多个并行序列,每个解析引擎和每个AMP都有一个序列,每个序列保留一批值(默认值100000) 通过单个会话提交单行插入时,所有行都由同一PE处理,因此按顺序分配值。当您注销并再次登录(或使用多个会话)时,您可能连接到另一个具有不同值范围的PE 插入“选择行”时,序列值由源放大器指定,同样,每个值都有不同的值范围 当TD崩溃或关闭时,所有未使用的值都会丢失(与其他DBMS类似)
在您的情况下,您可能会在这段时间内注销并登录到另一个PE。在Oracle或Postgres中,我想说的是涉及到一些序列缓存。但我不知道Teradata。可能要查看Sequences的cache属性手册,但永远不能保证标识列是整齐有序的。它们是在每安培的基础上产生的,这就是为什么你会看到这种行为。