Final Summary:
Table RowsNum InitSize(MB) FinalSize (MB) CompRate (%) State
--------------------------------------- --------------- ---------------
"DB2INST2"."EMPLOYEE" 42 0.50 10.25 -1950.00 Completed
Pre-Conversion Size (MB): 0.50
Post-Conversion Size (MB): 10.25
Compression Rate (Percent): -1950.00
SQL2446I The db2convert command completed successfully. Allrow-organized tables that satisfy the specified matching criteria have beenconverted to column-organized tables.
可以看到db2convert整个过程其实是基于admin_move_table的原理实现,整个过程也是对表在线做的类型转换。另外注意的是,范围分区表,MDC表和ITC表默认是不能被转换成列式组织表的,需要在上面的命令中使用-force选项才可以执行该命令进行转换。在转换前表存在的依赖对象最好能够删掉,外键约束会影响转换的时间,最重要的一点就是表的类型转换操作在线是不可逆的,所以建议最好在转换成列式组织表前对相关表或者对转换库做完整的备份。
db2convert -d sample
可以将数据库sample中所有的行式组织表转换成列式组织表。
重组列式组织表
在日常维护和使用列式组织表也需要定期对数据量增删操作比较频繁的表进行重组,以便于提高运程序的查询的执行性能,当然如果启用了auto_reorg参数,数据库会自动对相关列组织表进行重组操作,如果手动重组列组织表只需要在reorg table命令后面加上RECLAIM EXTENTS选项即可,如下演示了列式表的重组操作:
[db2inst1@dblab test]$ db2 reorgtable db2inst2.employee RECLAIM EXTENTS
DB20000I The REORG command completedsuccessfully.
如果不加该选项的手动重组的话,对于列式组织表的重组会有如下报错信息:
[db2inst1@dblab test]$ db2 reorgtable db2inst2.employee
SQL2216N SQL error "-1667"occurred while reorganizing a database table or its indexes.
解释执行计划
列式组织表的统计信息收集方法与普通的行式组织表相同,在此就不介绍。对于列式组织表的访问,通过如下的示例SQL,可以看到执行计划也会发生相应:
示例SQL:
SELECT
EMPNO,
ACTNO,
CHAR(EMSTDATE, USA),
CHAR(EMENDATE, USA)
FROM
DB2inst1.EMPPROJACT
WHERE
EMPNO IN
(SELECT
EMPNO
FROM
db2inst1.EMPLOYEE
WHERE
WORKDEPT='E11'
)
新的 CTQ 计划运算符表示列组织数据处理与行组织数据处理之间的转变,捕获列组织表说明信息的步骤与用于针对行组织表运行性能查询的步骤相同。
db2 set current explain mode explain
执行测试SQL语句
db2exfmt -d sample -1 -o output.exfmt
获取的执行计划信息如下:
Access Plan:
-----------
Total Cost: 71.9656
Query Degree: 1