« 多个列的Range分区时, 记录会到哪个分区? »
Oracle » http://www.anysql.net/oracle/oracle_composite_partition.html 2006-10-14 今天网友问了我一个关于多个列的Range分区的问题, 说是记录没有进入到他想要的分区,
由于在实际应用中我还没有用过这样的分区, 在理解那条记录要进入那个分区时, 还真有点难, 在一个列时,
是用小于来判断的, 那多个列时, 不是每个列都是用小于来判断的. 作为一个组合字段,
前导的字段是用小于等于来排序的, 我们可以想着”A2 < A3 < B2 < B3", 这时插入A1时, 五个值的排序是如何的呢?
按照字典的排序方法当然"A1"是最小的了, 而"A2"就进入了第二个分区.
不知道我自已在说什么? 总之这种情况下不是两个列都是用小于来比较的.
create table t (c1 date,c2 number) partition by range(c1,c2)
(
partition p11 values less than (to_date(’20010201′,’yyyymmdd’),2),
partition p12 values less than (to_date(’20010201′,’yyyymmdd’),3),
partition p21 values less than (to_date(’20010301′,’yyyymmdd’),2),
partition p22 values less than (to_date(’20010301′,’yyyymmdd’),3)
);
insert into t values (to_date(’20010201′,’yyyymmdd’),1);
insert into t values (to_date(’20010202′,’yyyymmdd’),2);
–结果第一条数据进了p11(期望是p21),第二条数据进了p21(期望是p22)
SQL> select * from t partition (p11);
C1 C2
——— ———-
01-FEB-01 1
SQL> select * from t partition (p21);
C1 C2
——— ———-
02-FEB-01 2
那个网友还提议Oracle应当加入List+List的复合分区, 我想List+Hash也是有用的吧.


Oracle 11g支持那网友想要的分区方式了.