DB2/400 SQL : "ALLOCATE" 指令
DB2/400 SQL : "ALLOCATE" instruction
A DB2 / 400 SQL 问题:在下面的语句中,当使用 "ALLOCATE" 创建列时
语句,这是否意味着数据库引擎创建的列的初始大小为 20 Mega?
因为系统的分析table表示有一个column的column为2G,7M.
"LENGHT" 列中指示的大小是否对应于分配的大小或列的最大大小?
IBM i 的 Db2 分两部分存储 table 数据。
固定长度row-buffertablespace和溢出space.
如果table只有固定长度的列,所有数据都在table space.
ALLOCATE(x)
表示Db在tablespace中为column分配了x个字节,其余存储在overflowspace.[=17=中]
可变类型的默认值是 allocate(0)
,因此理论上整个可变值都存储在溢出 space。
现实是varchar(30)
或更小的存储在固定长度table space为了性能,除非你明确指定allocate(0)
。
之所以重要,如果一个查询同时访问定长tablespace和溢出space,那么需要2I/Os来检索所有数据。
IBM 建议使用 allocate(x)
,其中 x 足够大以处理至少 80% 的值。
如您所见,长度是列的最大大小。
IBM ACS 的模式工具,例如,显示分配的长度...
create table mytable (
mykey integer
, myclob clob(200000) allocate(2000)
);
A DB2 / 400 SQL 问题:在下面的语句中,当使用 "ALLOCATE" 创建列时 语句,这是否意味着数据库引擎创建的列的初始大小为 20 Mega? 因为系统的分析table表示有一个column的column为2G,7M.
"LENGHT" 列中指示的大小是否对应于分配的大小或列的最大大小?
IBM i 的 Db2 分两部分存储 table 数据。
固定长度row-buffertablespace和溢出space.
如果table只有固定长度的列,所有数据都在table space.
ALLOCATE(x)
表示Db在tablespace中为column分配了x个字节,其余存储在overflowspace.[=17=中]
可变类型的默认值是 allocate(0)
,因此理论上整个可变值都存储在溢出 space。
现实是varchar(30)
或更小的存储在固定长度table space为了性能,除非你明确指定allocate(0)
。
之所以重要,如果一个查询同时访问定长tablespace和溢出space,那么需要2I/Os来检索所有数据。
IBM 建议使用 allocate(x)
,其中 x 足够大以处理至少 80% 的值。
如您所见,长度是列的最大大小。
IBM ACS 的模式工具,例如,显示分配的长度...
create table mytable (
mykey integer
, myclob clob(200000) allocate(2000)
);