好奇怪的问题-双字段范围分区

[复制链接]
查看11 | 回复9 | 2005-10-30 17:05:33 | 显示全部楼层 |阅读模式
create table ptemp
(
PKey integer,
vone integer,
vtow integer
)
partition by range(PKey, vone)
(

partition p1 values less than (3, 2),

partition p2 values less than (4, 4),

partition p3 values less than (maxvalue, maxvalue)
)
插入数据,结果
pkey=1 vone=3 插入到p1里面
pkey=2 vone=3 插入到p2里面
Why?


回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
弄错了~~
pkey=1 vone=3 插入到p1里面
pkey=2 vone=3 插入到p1里面 ----都插入p1里面
由此:双字段的范围分区实际上优先判断第一个范围,满足第一个范围字段,则插入相应分区,如果第一个字段分区范围相同,怎么办? 见下面:
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
create table ptemp
(
PKey integer,
vone integer,
vtow integer
)
partition by range(PKey, vone)
(
partition p1 values less than (4, 2),
partition p2 values less than (4, 4),
partition p3 values less than (maxvalue, maxvalue)
)
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
插入数据,结果
pkey=1 vone=1 插入到p1里面
pkey=1 vone=3 插入到p1里面
Oracle根据分区的Partition_Position来判断优先插入哪一个。
如果这样 双字段范围分区实际上没什么意义? oracle 9i release 2
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
是这样的呀,先比较第1个,如果相等,再比较下一个,以次类推。
如果你插入
pkey=4,vone=2或3,就放到p2了。
如果这样你觉得不对,那你想按什么方式存放?(1,3)放到p2里?那你的分区定义就要调整。
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
有点明白了
range分区范围
第一个分区 x<key1
第二个分区 key1<= x <key2
……
但第二个字段比较不比较还是没有任何意义吧 除了能起到对数据做限制的作用(当不满足第二分区条件不能插入),没有别的作用了,如果以第一字段为主,是不可能根据第二字段再去选择分区的,因为第一字段已经把分区定死了
是这样吧 搞糊涂了
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
如果我想用2个字段选择分区,该怎么定义?
如果先按field1的值判断,如果field1的值属于同一个范围,再根据第二个值判断加入哪个分区。
也就是 pkey=1 vone=1, pkey=1 vone=3, pkey=4 vone=1插入到3个不同的分区,我该怎么做呢?
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
实际需求是这样的 根据时间段第一次分区 1月、2月等 1个月内的数据按状态子分区1、2、3等
别告诉我用复合分区,复合分区已经被第2种状态用了。。。。。。
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
我顶,哪位大侠踩个脚印,谢了先
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
终于找到了答案 我需要的是list-range-list分区模式,可是oracle不支持,找到了一篇文档,用rang
e模拟,凑活用吧,oracle把分区逻辑设计的简单了些,唉……
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行