多个列的Range分区时, 记录会到哪个分区?

    今天网友问了我一个关于多个列的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也是有用的吧.

留言 (1)

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

发表留言:

« Previous | Main | Next »

英语900句 | English 900

  • Shall we go to the cinema?
  • 我们去看电影好吗?
  • Do you know what's on tonight?
  • 你知道今天上演什么?
  • May I ask you for a dance?
  • 可以请你跳支舞吗?
  • With pleasure.
  • 很荣幸.
  • Sorry, I'm engaged.
  • 对不起, 我有约在先了.