db2分区表

不支持的数据类型

分区表可以包含下列数据类型,但不支持将它们用作表分区键列:
  • 用户定义的类型(结构化)
  • LONG VARCHAR
  • LONG VARCHAR FOR BIT DATA
  • BLOB
  • BINARY LARGE OBJECT
  • CLOB
  • CHARACTER LARGE OBJECT
  • DBCLOB
  • LONG VARGRAPHIC
  • REF
  • C 变长字符串
  • Pascal 变长字符串

分区表中,不支持 XML 数据类型。

如果您选择使用 CREATE TABLE 语句的 EVERY 子句来自动生成数据分区,那么只能将一列用作表分区键。如果您选择通过在 CREATE TABLE 语句的 PARTITION BY 子句中指定每个范围来手动生成数据分区,那么可以将多个列用作表分区键,如以下示例所示:
CREATE TABLE sales (year INT, month INT)
   PARTITION BY RANGE(year, month) 
   (STARTING FROM (2001, 1) ENDING (2001,3) IN tbsp1,
   ENDING (2001,6) IN tbsp2, ENDING (2001,9) 
   IN tbsp3, ENDING (2001,12) IN tbsp4,
   ENDING (2002,3) IN tbsp5, ENDING (2002,6) 
   IN tbsp6, ENDING (2002,9) IN tbsp7,
   ENDING (2002,12) IN tbsp8)
这将生成 8 个数据分区,即 2001 年和 2002 年的每个季度有一个数据分区
注:
  1. 当将多个列用作表分区键时,将把这些列视为组合键(类似于索引中的组合键),其中,后面的列依赖于前面的列。指定的每个起始值或结束值(所有列一起)不能超出 512 个字符。此限制与 SYSCAT.DATAPARTITIONS 目录视图中的 LOWVALUE 和 HIGHVALUE 列大小对应。如果指定超出 512 个字符的起始值或结束值,就会导致错误 SQL0636N,原因码为 9。
  2. 分区是多列的,而不是多维的。在表分区中,使用的所有列都包含在单个维中。

生成列

可以将生成列用作表分区键。此示例创建包含 12 个数据分区的表,即每个月一个数据分区。对于任何年份,一月份的所有行都将被放到第一个数据分区中,二月份的行将被放到第二个数据分区中,依此类推。

示例 1

CREATE TABLE monthly_sales (sales_date date,
	sales_month int GENERATED ALWAYS AS (month(sales_date)))
        	PARTITION BY RANGE (sales_month)
        	(STARTING FROM 1 ENDING AT 12 EVERY 1);
注:
  1. 对于表分区键中使用的生成列,不能改变或删除其表达式。不允许对表分区键中使用的列添加生成列表达式。对于表分区键中使用的列,如果尝试添加、删除或改变该列的生成列表达式,就会导致错误(SQL0270N,原因码为 52)。
  2. 如果生成列不是单调的,或者优化器无法检测出该列是否是单调的,就不会对范围谓词使用数据分区消除功能。如果存在非单调表达式,那么只能对等价或 IN 谓词执行数据分区消除功能。有关单调性的详细讨论和示例
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值