技术开发 频道

DB2分区式数据库分区键的选择和更改


IT168技术文档】 
    环境 产品:DB2 UDB 
    平台:跨平台 
    版本:v8 

    问题 介绍 DB2 分区式数据库中分区键的概念,选择原则,以及如果实现分区键的更改。

    解答 在 DB2 UDB 中分区键是指一个列(或一组列),用于确定将某行数据存储在哪个分区上。分区键是使用 CREATE TABLE 语句在创建表时定义的。当某个表所属的表空间分布在包含有多个分区的数据库分区组中时,如果未对该表定义分区键,缺省情况下将会使用主键的第一列创建分区键;若未指定主键,则缺省分区键是在该表中定义的第一个非长型字段列。( 长型包括所有长型数据类型和所有大对象(LOB)数据类型)。 

    如果创建的表所属的表空间位于单分区数据库中,而用户需要使用分区键时,则必须显式定义分区键,否则缺省情况下不创建它。只有在单分区数据库分区组中才允许创建不带分区键的表。以后可以使用 ALTER TABLE 语句添加或删除分区键,但只能对其表空间与单分区数据库分区组相关联的表进行该操作。 

    好的表分区键就是能将数据均匀分布在数据库分区组中的所有数据库分区上的分区键。因此在定义分区键时,应该考虑下列几点: 

    ·不支持创建只包含长型数据类型(LONG VARCHAR、LONG VARGRAPHIC、BLOB、CLOB 或 DBCLOB)的多分区表。 
    ·不能改变分区键定义。 
    ·分区键应该包括最频繁连接的列。 
    ·分区键应该由经常参与 GROUP BY 子句的列组成。 
    ·任何唯一键或主键必须包含所有分区键列。 
    ·在联机事务处理(OLTP)环境中,分区键中的所有列都应该通过使用带常量或主机变量的等于(=)谓词来参与事务。例如,假定有一个在事务中经常使用的职员号 emp_no,如: 

    UPDATE emp_table SET ... WHERE emp_no = host-variable 

    在此情况下,EMP_NO 列对于 EMP_TABLE 而言就是一个不错的单列分区键。 

    应该在创建表时选择创建恰当的分区键,否则一旦数据加载入库,再试图更改分区键,操作上会比较麻烦,其大致过程如下: 
    
    对表空间位于单分区数据库分区组的表进行分区键的更改: 

    1. 使用 ALTER TABLE ... DROP PARTITIONING KEY 的语句,删除现有分区键。 
    2. 使用 ALTER TABLE ... ADD PARTITIONING KEY 的语句,创建另一个分区键。 

    注:只能在单分区数据库分区组中的表上执行上述更改分区键的语句。 

    对表空间位于多分区数据库分区组的表进行分区键的更改: 

    在多分区数据库环境下将不能使用 ALTER TABLE 语句更改分区键,不过可采用以下提供的两种方法: 

    1. 将所有数据导出至单分区数据库分区组中,然后利用上述单分区数据库分区键更改的步骤进行操作。 
    2. 导出表中所有数据,删除该表,重新创建表并重新定义分区键,然后导入所有数据。 

    由于这两种方法都不适用于大数据库;因此,再次建议用户在实现大数据库的设计之前,就应考虑选择合适的列定义分区键。

0
相关文章