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