创建表
create table sample.upps_pay_transdtl_epcc( --都有not null 但是ddl语句已经miss
payserno int,
paydate varchar(8),
paytime varchar(8),
amount varchar(100),
payername varchar(100),
payeracctno varchar(100),
payeraccttype varchar(100),
payeename varchar(100),
payeeacctno varchar(100),
payeeaccttype varchar(100),
pathprocstatus varchar(1),
pathprocmsg varchar(100),
coreprocstatus varchar(1),
coreprocmsg varchar(100),
trxstatus varchar(1),
trxmsg varchar(100),
payorganno varchar(100),
payorganname varchar(100)
)
comment on table sample.upps_pay_transdtl_epcc is '登记簿';
comment on column sample.upps_pay_transdtl_epcc.payserno is '流水号';
comment on column sample.upps_pay_transdtl_epcc.paydate is '支付日期';
comment on column sample.upps_pay_transdtl_epcc.paytime is '支付时间';
comment on column sample.upps_pay_transdtl_epcc.amount is '交易金额';
comment on column sample.upps_pay_transdtl_epcc.payername is '付款人名称';
comment on column sample.upps_pay_transdtl_epcc.payeracctno is '付款人账户账号';
comment on column sample.upps_pay_transdtl_epcc.payeraccttype is '付款人账户类型';
comment on column sample.upps_pay_transdtl_epcc.payeename is '收款人名称';
comment on column sample.upps_pay_transdtl_epcc.payeeacctno is '收款人账户账号';
comment on column sample.upps_pay_transdtl_epcc.payeeaccttype is '收款人账户类型';
comment on column sample.upps_pay_transdtl_epcc.pathprocstatus is '通道状态';
comment on column sample.upps_pay_transdtl_epcc.pathprocmsg is '通道描述';
comment on column sample.upps_pay_transdtl_epcc.coreprocstatus is '核心状态';
comment on column sample.upps_pay_transdtl_epcc.coreprocmsg is '核心描述';
comment on column sample.upps_pay_transdtl_epcc.trxstatus is '业务状态';
comment on column sample.upps_pay_transdtl_epcc.trxmsg is '业务描述';
comment on column sample.upps_pay_transdtl_epcc.payorganno is '机构号';
comment on column sample.upps_pay_transdtl_epcc.payorganname is '机构名称';
创建索引
create index sample.UPPS_PAY_TRANSDTL_EPCC_5 on
sample.UPPS_PAY_TRANSDTL_EPCC
(paydate)
collect sampled detailed statistics compress no allow reverse scans;
聚合索引
create index sample.UPPS_PAY_TRANSDTL_EPCC_3 on
sample.UPPS_PAY_TRANSDTL_EPCC
(paydate,payserno,payorganno)
collect sampled detailed statistics compress no allow reverse scans;
创建序列
create sequence paySerNo start with 1 increment by 1 minvalue 1 maxvalue 999999999
使用序列
next value for paySerNo
删除序列
drop sequence serNo
创建存储过程
create or REPLACE procedure db2Test_insert(
IN IN_PAYDATE VARCHAR(8),
IN IN_INSERT_NUMBER int
) language sql
BEGIN
declare V_PAYDATE VARCHAR(8);
declare V_number int;
declare V_i int;
set V_PAYDATE = IN_PAYDATE;
set V_i = 1;
set V_number = IN_INSERT_NUMBER;
--if V_i <= V_number then
WHILE V_i <= V_number DO INSERT
INTO sample.UPPS_PAY_TRANSDTL_EPCC(
payserno ,
paydate ,
paytime ,
amount ,
payername ,
payeracctno ,
payeraccttype ,
payeename ,
payeeacctno ,
payeeaccttype ,
pathprocstatus ,
pathprocmsg ,
coreprocstatus ,
coreprocmsg ,
trxstatus ,
trxmsg ,
payorganno ,
payorganname
) values(
next value for sample.paySerNo ,
IN_PAYDATE ,
'215100' ,
'50000' ,
'付款人-胡波涛' ,
'付款账号-6228483950229' ,
'付款类别-借记卡' ,
'付款人-支付宝' ,
'付款账号-支付宝的备付金账号' ,
'付款类别-借记卡' ,
'1' ,
'通道成功' ,
'1' ,
'核心成功' ,
'1' ,
'业务成功' ,
'机构号-Z2440000035' ,
'支付宝'
);
commit;
set V_i = V_i + 1;
--end if;
end WHILE;
END
使用存储过程
call sample.db2Test_insert('20190103',100000)
删除存储过程
drop procedure "db2Test_insert"
创建视图
create view sample.v_transdtl_pecc
(paydate1,paytime1,payoganno1)
as select paydate,paytime,payorganno from sample.upps_pay_transdtl_epcc
where paydate='20190121'
使用视图
select * from sample.v_transdtl_pecc
创建大批量的表数据之后需要做:
-- reorg表
CALL SYSPROC.ADMIN_CMD('REORG TABLE SAMPLE.UPPS_PAY_TRANSDTL_EPCC');
-- runstats 表
CALL SYSPROC.ADMIN_CMD('RUNSTATS ON TABLE SAMPLE.UPPS_PAY_TRANSDTL_EPCC ON ALL COLUMNS WITH DISTRIBUTION ON ALL COLUMNS AND SAMPLED DETAILED INDEXES ALL');
刚才用存储过程新增了五百万的数据,这个时候需要reorg表了。然后我想看一下reorg前和reorg后执行sql的时间变化。
reorg前:
select paydate,count(*) from sample.UPPS_PAY_TRANSDTL_EPCC group by paydate
--查看执行计划:总成本:30,267.756
--11 已获取行 - 52921毫秒
reorg后:
select paydate,count(*) from sample.UPPS_PAY_TRANSDTL_EPCC group by paydate
--查看执行计划:总成本:30,267.756 (执行计划不受reorg影响)
-- 11 已获取行 - 5290毫秒
然后执行runstate
select paydate,count(*) from sample.UPPS_PAY_TRANSDTL_EPCC group by paydate
--查看执行计划:总成本:21,972.877(执行计划受runstate影响)
--11 已获取行 - 5459毫秒(可是执行计划降低之后,执行时间并没有减少。。这是为什么?120190126
10点09分)
结论:reorg确实能大大提升查询效率。
db2 的一些命令 :(待研究。20190121-23点07分)
db2top命令
db2advis 命令
db2expln命令
db2reorg命令
db2 runstatus命令
版权声明:本文为hu_bo_tao原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。