1. 表分区作用
表分区可扩展表的存储能力、对于大量数据表使用分区字段可提高查询效率。
2. 创建表分区
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表空间中。我们还能添加,删除表分区。
3. 添加分区
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"
4. 删除分区
其思路是:detach分区到一张临时表(该操作会创建临时表,临时表已存在会报错,detach是分离分区的意思),再将临时表删除。
db2 "alter table ixp.esbtlog detach partition PART20181118 into table tb_temp"
db2 "drop table tb_temp"
5. 查询表分区
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. 要想将一个已存在的表改成分区表,需要先将原表数据保存下来,删除表。再新建分区表,设定好表的分区及其范围,将原数据导入进去。
网友评论