DB2 / 400 SQL:“ALLOCATE”指令

问题描述 投票:0回答:1

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

“LENGTH”列中指示的大小是否与分配的大小或列的最大大小相对应?

sql db2-400
1个回答
1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.