在压缩前,我们通常想先评估一下表压缩后能节省多少空间可以利用db2 inspect和db2inspf命令来实现:
Sql代码
db2 inspect rowcompestimate table name tbname results keep tbfile
DB2 " INSPECT ROWCOMPESTIMATE TABLE NAME test1 RESULTS KEEP test1.resp "
命令成功完成,这样我们就在C:\Program Files\IBM\SQLLIB\DB2下生成了一个文件test1.resp,由于这个文件是二进制的,
我们需要使用DB2INSPF将此文件格式转成可读模式才能查看,继续在DB2CLP窗口中执行DB2INSPF命令
C:\> cd C:\Program Files\IBM\SQLLIB\DB2
C:\Program Files\IBM\SQLLIB\DB2> DB2INSPF test1.resp output_test1.resp
db2inspf tbfile alantab_output_RESULTFILE
1 区别: count(1) 选择表的第一个字段来统计
count(*) 选择整行来统计
count(name) 选择特定字段来统计
2 性能 在没有索引情况下 count(1)和count(name)等同 比COUNT(*)好些
因为数据都放在数据块中,不管如何都无法避免访问一样多的数据块
在有索引情况下 count(1) count(name) 就访问索引去了.
深入DMS表空间
每个表空间至少要有5个数据块,前三个存储表空间元数据,第一个数据库是表空间头,第二个是第一个SMP(space map page),用来跟踪第一组数据的使用情况,第三个
是对象表,用来定位表空间中定义的对象,对于每个表对象,至少分配2个数据块,第一个是这个对象的extent map,另外一个用来存储数据。
触发器
-- 当修改表t_trigger 的字段t_num小于500时后,向t_tx表中插入一条记录
CREATE TRIGGER tri_less5
AFTER UPDATE OF t_num ON t_trigger
REFERENCING NEW AS n
FOR EACH ROW MODE DB2SQL
WHEN (n.t_num <=500)
INSERT INTO t_tx VALUES (n.t_num,CURRENT_TIMESTAMP)
函数
DROP FUNCTION DB2ADMIN.DEPTNAME (VARCHAR ());
CREATE FUNCTION deptname(p_empid VARCHAR(6))
RETURNS VARCHAR(32)
LANGUAGE SQL
SPECIFIC deptname
BEGIN ATOMIC
DECLARE v_name VARCHAR(32);
DECLARE v_err VARCHAR(70);
SET v_name = (
SELECT t.DEPTNAME FROM DEPARTMENT t,EMPLOYEE e WHERE e.WORKDEPT = t.DEPTNO AND e.EMPNO = p_empid
);
Sql代码
db2 inspect rowcompestimate table name tbname results keep tbfile
DB2 " INSPECT ROWCOMPESTIMATE TABLE NAME test1 RESULTS KEEP test1.resp "
命令成功完成,这样我们就在C:\Program Files\IBM\SQLLIB\DB2下生成了一个文件test1.resp,由于这个文件是二进制的,
我们需要使用DB2INSPF将此文件格式转成可读模式才能查看,继续在DB2CLP窗口中执行DB2INSPF命令
C:\> cd C:\Program Files\IBM\SQLLIB\DB2
C:\Program Files\IBM\SQLLIB\DB2> DB2INSPF test1.resp output_test1.resp
db2inspf tbfile alantab_output_RESULTFILE
1 区别: count(1) 选择表的第一个字段来统计
count(*) 选择整行来统计
count(name) 选择特定字段来统计
2 性能 在没有索引情况下 count(1)和count(name)等同 比COUNT(*)好些
因为数据都放在数据块中,不管如何都无法避免访问一样多的数据块
在有索引情况下 count(1) count(name) 就访问索引去了.
深入DMS表空间
每个表空间至少要有5个数据块,前三个存储表空间元数据,第一个数据库是表空间头,第二个是第一个SMP(space map page),用来跟踪第一组数据的使用情况,第三个
是对象表,用来定位表空间中定义的对象,对于每个表对象,至少分配2个数据块,第一个是这个对象的extent map,另外一个用来存储数据。
触发器
-- 当修改表t_trigger 的字段t_num小于500时后,向t_tx表中插入一条记录
CREATE TRIGGER tri_less5
AFTER UPDATE OF t_num ON t_trigger
REFERENCING NEW AS n
FOR EACH ROW MODE DB2SQL
WHEN (n.t_num <=500)
INSERT INTO t_tx VALUES (n.t_num,CURRENT_TIMESTAMP)
函数
DROP FUNCTION DB2ADMIN.DEPTNAME (VARCHAR ());
CREATE FUNCTION deptname(p_empid VARCHAR(6))
RETURNS VARCHAR(32)
LANGUAGE SQL
SPECIFIC deptname
BEGIN ATOMIC
DECLARE v_name VARCHAR(32);
DECLARE v_err VARCHAR(70);
SET v_name = (
SELECT t.DEPTNAME FROM DEPARTMENT t,EMPLOYEE e WHERE e.WORKDEPT = t.DEPTNO AND e.EMPNO = p_empid
);
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12961536/viewspace-1061385/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/12961536/viewspace-1061385/