Oracle中,使用hash建立分区的表,如何知道数据在哪一个分区?

zlstomorrow 2014-10-27 04:53:15
例如:依据字段A进行hash,将数据hash到part_1、part_2和part_3中,那么如何知道字段A中值为a的数据在part_1、part_2还是part_3中?从数据字典中能获得吗?
...全文
903 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sych888 2014-10-28
  • 打赏
  • 举报
回复
HASH分区,字段的列值是按照HASH分配到HASH分区中的 可以直接查询具体的分区 字段是很多,但是分区个数是不多的,如你的例子,就才3个分区
bw555 2014-10-28
  • 打赏
  • 举报
回复
user_segments配合对rowid的解析,应该也能实现,但是实现起来比这个麻烦多了
zlstomorrow 2014-10-28
  • 打赏
  • 举报
回复
引用 4 楼 bw555 的回复:
哈希分区表属于散列分区,还真不好确定属于哪个分区 不知道能不能获取分区的物理存储范围,然后根据rowid的信息进行查找 rowid由file# block# row#组成,占用6个bytes的空间,10 bit 的 file# ,22bit 的 block# ,16 bit 的 row# 最简单的方式是写个函数,调用就可以了
FUNCTION GetPartition(P_A IN VARCHAR2) RETURN varchar2 IS
	i number;
BEGIN
  select count(1) into i from T partition(part_1) where A=P_A and rownum=1;
  if i>0 then
  	return 'part_1';
  end if;
  select count(1) into i from T partition(part_2) where A=P_A and rownum=1;
  if i>0 then
  	return 'part_2';
  end if;
  select count(1) into i from T partition(part_3) where A=P_A and rownum=1;
  if i>0 then
  	return 'part_3';
  end if;
  return null;
END;
数据字典的某个视图没有么?
bw555 2014-10-28
  • 打赏
  • 举报
回复
哈希分区表属于散列分区,还真不好确定属于哪个分区 不知道能不能获取分区的物理存储范围,然后根据rowid的信息进行查找 rowid由file# block# row#组成,占用6个bytes的空间,10 bit 的 file# ,22bit 的 block# ,16 bit 的 row# 最简单的方式是写个函数,调用就可以了
FUNCTION GetPartition(P_A IN VARCHAR2) RETURN varchar2 IS
	i number;
BEGIN
  select count(1) into i from T partition(part_1) where A=P_A and rownum=1;
  if i>0 then
  	return 'part_1';
  end if;
  select count(1) into i from T partition(part_2) where A=P_A and rownum=1;
  if i>0 then
  	return 'part_2';
  end if;
  select count(1) into i from T partition(part_3) where A=P_A and rownum=1;
  if i>0 then
  	return 'part_3';
  end if;
  return null;
END;
zlstomorrow 2014-10-28
  • 打赏
  • 举报
回复
引用 2 楼 bw555 的回复:
直接分别执行select count(*) from T partition(分区名称) where A=‘a’不就知道在哪了吗?
字段A的值有几百个呢,不能分别去查啊。我想知道的是有没有分区与字段的映射关系
bw555 2014-10-27
  • 打赏
  • 举报
回复
直接分别执行select count(*) from T partition(分区名称) where A=‘a’不就知道在哪了吗?
zlstomorrow 2014-10-27
  • 打赏
  • 举报
回复
先自己顶一下

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧