28

本文介绍如何使用DB2的db2inspect和db2inspf命令评估表压缩后的空间节省效果,并解释了COUNT(*)与COUNT(1)的区别及性能对比。此外还涉及DMS表空间管理、触发器创建及函数定义等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在压缩前,我们通常想先评估一下表压缩后能节省多少空间可以利用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
  );

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12961536/viewspace-1061385/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/12961536/viewspace-1061385/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值