db2表分区

db2表分区,第1张

     表分区可扩展表的存储能力、对于大量数据表使用分区字段可提高查询效率。

   create table IXP.ESBTLOG(

     UUID VARCHAR(32),

     UUID_POS VARCHAR(20),

     MSG_ID VARCHAR(100),

     ESB_CODE VARCHAR(20) ,

     CLI_ID CHAR(3),

     CLI_ID_BOCS CHAR(2),

     SERV_ID CHAR(3),

     SERV_TRAN_CODE VARCHAR(20),

     SERV_TCODE VARCHAR(20),

     ESB_RET_CODE VARCHAR(20),

     ERR_MSG VARCHAR(200),

     TRACE_NO VARCHAR(32),

     TRAN_DATE CHAR(8),

     TRAN_TIME CHAR(6),

     TXN_STATUS CHAR(1),

     JOURNAL_NO VARCHAR(32),

     EXT_UUID VARCHAR(32),

     TXN_TOKEN VARCHAR(32),

     NODE_NAME VARCHAR(32),

     TRAN_BEGIN_TIME TIMESTAMP,

     TRAN_END_TIME TIMESTAMP,   

     SP1_BEGIN_TIME TIMESTAMP, 

     SP1_END_TIME TIMESTAMP,

     USER_BOCS VARCHAR(20),  

     WKSTATION VARCHAR(20),   

     RET_TRAN_DATE VARCHAR(20),  

     RET_TRAN_TIME VARCHAR(20),   

     RET_AC_DATE VARCHAR(20),   

     RET_TRACE_NO VARCHAR(20),   

     AP_TRACE_NO VARCHAR(20),   

     BR_NO VARCHAR(20),

     TM_SMP TIMESTAMP default current timestamp

  )PARTITION BY RANGE(TM_SMP)

  (

   PARTITION PARTMAX starting '9999-12-31-00.00.00.000000' INCLUSIVE ending MAXVALUE EXCLUSIVE

  )in USERSPACE1

注意:倒数三行是创建分区表的关键,此例中此TM_SMP为分区字段,第一个分区名为PARTMAX,从'9999-12-31-00.00.00.000000'到无穷大都是它的分区范围。我们还可以在EXCLUSIVE后面继  续定义其它的分区,定义规则与定义PARTMAX分区相同,当然定义每个分区需以逗号分隔。最后一行in USERSPACE1表示分区表创建在USERSPACE1表空间中。我们还能添加,删除表分区。

 db2 "alter table ESBTLOG add partition part20181118 STARTING '2018-11-18-00.00.00.000000' INCLUSIVE ENDING '2018-11-19-00.00.00.000000' EXCLUSIVE"

    其思路是:detach分区到一张临时表(该 *** 作会创建临时表,临时表已存在会报错,detach是分离分区的意思),再将临时表删除。

    db2 "alter table ixp.esbtlog detach partition PART20181118 into table tb_temp"

    db2 "drop table tb_temp"

    A. 查询该表共有多少分区

        db2 "select substr(TABNAME ,1,11) t_name,substr(DATAPARTITIONNAME ,1,12) part_name,DATAPARTITIONID ,substr(LOWVALUE,1,28) low_value,substr(HIGHVALUE,1,28) high_value from syscat.datapartitions where tabname='ESBTLOG' order by datapartitionid"

    B. 显示每个分区有多少数据(没有数据的不会显示) 

        db2 "select substr(tm_smp,1,10) as tran_day,count(*) from esbtlog where 1=1 group by substr(tm_smp,1,10)"

    C. 查询某个分区有多少数据量

        db2 "select count(*) from ixp.esbtlog where substr(tm_smp,1,10)='2019-01-08'"

 1. 请注意上方例子中的名称和分区范围。

2. 要想将一个已存在的表改成分区表,需要先将原表数据保存下来,删除表。再新建分区表,设定好表的分区及其范围,将原数据导入进去。

创建分区:ALTER TABLE tablename ADD PARTITION statis_month STARTING'201301'

INCLUSIVE ENDING '20090102' INCLUSIVE。

查询分区select * from syscat.datapartitions t where tabschema =模式名 and tabname = 表名

数据库中还有大量系统表的,所以我觉得你查某些模式下的表比较好: select count(*) from syscat.tables where tabschema='GP' GP为某用户模式。 当然也可以用 select count(*) from syscat.tables where tabschema='GP' 查出所有表的数量。 再...


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9852610.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存