DB2 / 400 SQL:“ ALLOCATE”指令

时间:2019-03-21 11:12:27

标签: sql db2-400

DB2 / 400 SQL问题:在下面的语句中,当使用“ ALLOCATE”创建列时 语句,这是否意味着数据库引擎将创建初始大小为20 Mega的列? 因为对系统表的分析表明该列具有2G,7M的列。

“长度”(LENGHT)列中指示的大小是否对应于分配的大小,或该列的最大大小?

enter image description here

1 个答案:

答案 0 :(得分:0)

用于IBM i的DB2将表数据分为两部分。

固定长度的行缓冲区表空间和溢出空间。

如果表仅具有固定长度的列,则所有数据都在表空间中。

ALLOCATE(x)表示Db在表空间中为该列分配了x个字节,其余的存储在溢出空间中。

变化类型的默认值为allocate(0),因此理论上整个变化值都存储在溢出空间中。

为了提高性能,现实(varchar(30)或更小)存储在固定长度的表空间中,除非您明确指定allocate(0)

重要的原因,如果查询访问固定长度表空间和溢出空间,那么需要2个I / O来检索所有数据。

IBM建议使用allocate(x),其中x足以处理至少80%的值。

如您所见,长度是列的最大大小。

例如,IBM ACS的模式工具向您显示分配的长度...

create table mytable (
  mykey integer
  , myclob clob(200000) allocate(2000)
);

ACS table definition screenshot