Teradata自动增量列以不同范围为起点,同时在不同时间段插入记录

时间:2014-07-17 12:06:35

标签: 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条记录时,它将1001到100049作为此Col1的值,而不是从1开始。对于在下一小时插入,它取值200001到200049.依此类推。在第9个小时后,它花了1000001到1000049个值。

Teradta的自动增量究竟如何运作?是否在内存中与其他表中的其他自动增量列共享?

为什么它不以1开头并且在下次插入时继续增加1?如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

IDENTITY不是单个序列,这将是并行数据库系统中的瓶颈。事实上,对于每个表,并行存在多个序列,每个序列对应一个解析引擎和每个AMP,每个序列都保留一批值(默认值为100,000)。

当您通过单个会话提交单行INSERT时,所有行都由同一个PE处理,因此将按顺序分配值。当您再次注销和登录(或使用多个会话)时,您可能会连接到另一个具有不同值范围的PE。

当您插入SELECT行时,源AMP分配序列值,每个值都有不同的值范围。

当TD崩溃或关闭时,所有未使用的值都将丢失(类似于其他DBMS)。

在您的情况下,您可能会在中间注销并登录到其他PE。