db2中表空间、分区索引的设置

一、表分区(V9版本)

1  概述

表分区是一种数据组织模式,在这种模式中,数据将以一个或多个表列的值为依据,分割到多个称为数据分区(或范围)的存储对象中。每一个数据分区被分别存储。这些存储对象可以位于不同的表空间中,可以位于相同的表空间中,也可能是这两种情况的组合。

 

2 创建的分区指定不同表分区

将表中的分区置于不同的表空间中,前提是表空间的pagesize必须相等,否则不能创建。

 

CREATE TABLE DB2INST1.GCRY_PP (

  RYLBDM   CHARACTER(2)  NOT NULL,

  XM    VARCHAR(50)   NOT NULL,

  GCRQ  CHARACTER(8)  NOT NULL,

  PRIMARY KEY (WYBS)

  )

  IN BUSINESS_TBS INDEX IN BUSINESS_TBS

  PARTITION BY RANGE ( GCRQ ) (

      PARTITION PART2008 STARTING '20080101' INCLUSIVE  ENDING '20081231' IN B2_TBS INDEX IN B2_TBS ,

      PARTITION PART2009 STARTING '20090101' INCLUSIVE  ENDING '20091231' IN BUSINESS_TBS INDEX IN BUSINESS_TBS,

      PARTITION PART2010 STARTING '20100101' INCLUSIVE  ENDING '20101231',

      PARTITION PART2011 STARTING '20110101' INCLUSIVE  ENDING '20111231',

      PARTITION PART2012 STARTING '20120101' INCLUSIVE  ENDING '20121231',

      PARTITION PART2013 STARTING '20130101' INCLUSIVE  ENDING '20131231',

      PARTITION PART2014 STARTING '20140101' INCLUSIVE  ENDING '20141231'

  );

 

表分区B2_TBS、BUSINESS_TBS pagesize页大小必须相同,否则将创建不了

 

 

3  创建的分区指定相同表分区

DROP TABLE DB2INST1.GCRY_P; 

CREATE TABLE DB2INST1.GCRY_P (

  ID    CHARACTER(2)  NOT NULL,

  XM    VARCHAR(50)   NOT NULL,

  GCRQ  CHARACTER(1)  NOT NULL,

PRIMARY KEY (WYBS)

  )

  IN DASHUJU_TBS INDEX IN DASHUJU_TBS

  PARTITION BY RANGE ( GCRQ ) (

      PARTITION PART2008 STARTING '20080101' INCLUSIVE  ENDING '20081231',

      PARTITION PART2009 STARTING '20090101' INCLUSIVE  ENDING '20091231',

      PARTITION PART2010 STARTING '20100101' INCLUSIVE  ENDING '20101231',

      PARTITION PART2011 STARTING '20110101' INCLUSIVE  ENDING '20111231',

      PARTITION PART2012 STARTING '20120101' INCLUSIVE  ENDING '20121231',

      PARTITION PART2013 STARTING '20130101' INCLUSIVE  ENDING '20131231',

      PARTITION PART2014 STARTING '20140101' INCLUSIVE  ENDING '20141231'

  );

 

修改—增加表分区

--不给的分区名称

alter table DB2INST1.GCRY_P add PARTITION STARTING '20150101' ENDING '20151231';

--给定分区名称

alter table DB2INST1.GCRY_P add PARTITION PART2015 STARTING '20150101' ENDING '20151231';

二、本地分区索引(V9版本)

 

1  简介

DB2 V9.7 提出了范围分区表的分区索引概念,这为客户在原有的全局索引基础上增加了一个新的功能选择。分区索引采用 B 树结构,将一棵全局大树分解为诺干个小树,树的层次将会显著减少,这将会提高数据的插入、更新、删除和扫描的性能。分区索引在分区表的 Roll in/Roll out 时不需要重新构建整个索引,加速了数据的滚入和滚出。

DB2 V9.7 使用分区索引的索引组织方案,即索引数据根据表的分区方案分布到多个索引分区中,每个索引分区都只引用对应数据分区中的表行。

一个分区表可以同时存在分区索引和非分区索引。如果创建分区索引,那个每个索引分区将都包含单个数据分区的索引条目,索引叶子节点中的 RID 也将只指向单个数据分区。

 

在我们使用 Alter table 语句的 AttachPartition 子句将数据 Roll in 或者 Roll Out 分区表时,分区索引将特别有用。如果使用非分区索引,那么必须先发出 Set Integrity 语句,新添加的分区中的数据才能进入联机状态。这个过程可能非常消耗时间,并可能消耗大量日志空间。当使用分区索引时这些开销将会被消除。

 

分区索引的每个分区均采用 B 树结构存储,由于分区后一个大型 B 树被划分为若干小型 B 树,树的层数将会减少,这会提高数据的插入、更新、删除以及扫描的性能。同时我们执行查询时,DB2 将会采用分区消除优化方法提高扫描性能和并行性。分区消除技术帮助优化器先过滤了不需要的索引分区,只需要扫描相应的分区就能完成查询,这比扫描非分区的索引更为高效。

2、 总结

1)      分区索引主要是针对分区表才可以申明创建分区索引。

2)      不管是分区表还是非分区表,主键索引都是非分区索引。

3)      非分区表,创建索引时不可使用“PARTITIONED”关键字申明。

4)      只有分区表索引,在创建的时候可以使用“PARTITIONED”关键字申明,不加此关键字,默认创建的是分区索引。

申明为分区索引

CREATE INDEX DB2INST1.GCRQ_INDEX

  ON DB2INST1.GCRY_P

    ( GCRQ DESC )

  PARTITIONED;

 

申明为非分区索引

CREATE INDEX DB2INST1.GCRQ_INDEX

  ON DB2INST1.GCRY_P

    ( GCRQ DESC )

  NOT PARTITIONED;

 

3. 查看表的索引信息

  select tabname tab_name, INDNAME inx_name,TBSPACEID

 from syscat.indexes where tabname='GCRY_P'

4.查看索引分区信息

--索引分区信息

select INDNAME ,DATAPARTITIONID from syscat.indexpartitions

 

你可能感兴趣的:(Database)