DB2 / 400 SQL问题:在下面的语句中,使用“ALLOCATE”语句创建列时,这是否意味着数据库引擎创建的初始大小为20兆的列?因为系统表的分析表明该列的列为2G,7M。
“LENGTH”列中指示的大小是否与分配的大小或列的最大大小相对应?
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)
);