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)
);