问题描述
汤姆,
我在不同分区之间的数据分布有问题。
示例:
创建表t
按哈希 (X) 划分 (
分区32
储存在 (VRI)
作为
(SELECT C作为T ( ds.X 作为 VARCHAR2 (20))作为 X,
来自测试ds );
)
/
在这里,ds.x包含唯一的记录,当我执行此脚本时,所有记录都存储在一个分区下,而不是所有32个不同的分区。
同样,当我插入具有不同唯一编号的任何新记录 (以上执行完成后) 时,它可以工作并经过不同的分区。
非常感谢您的帮助。
拉杰夫。
嗨,
让我详细说明一下,也包括我对此的分析。
I am creating a table using CT作为 with only one column X having dataype VARCHAR2(20). This is one simple table and not nested one.
示例如下:
创建表test1
NOLOGGING
PARTITION BY H作为H (X)
(分区第 _ 1部分
表空间VRI,
分区第2部分
表空间VRI,
分区第3部分
表空间VRI,
分区部分 _ 4
表空间VRI,
分区部分 _ 5
表空间VRI,
分区部分 _ 6
表空间VRI,
分区部分 _ 7
表空间VRI,
分区部分 _ 8
TABLESPACE VRI) 作为 (SELECT C作为T ( ds.X 作为 VARCHAR2(20))作为 X
来自测试ds,其中rownum<= 50000);
表test1从表 “测试” 中检索记录,该表具有类似的配置 (分区编号和类型),其列也具有主键约束。
我的分析:
名为test的表在所有分区中具有数据,如
PART_1 -100000记录
第2部分-100005记录
----- PART_8 100000记录
当我执行上述操作时,将过滤器设置为rownum<= 50000,尽管我知道它从表 “test” 的PART_1中获取记录
执行后,所有记录都存储在表 “test1” 的PART_1中
我的问题是,为什么oracle不会在表 “test1” 中的所有8个分区中分散记录?
它如何记住表 “测试” 的分区名称。
同样,如果我从表 “test” 的PART_4中获取记录,则存储在表 “test1” 的PART_4中。
非常感谢您的帮助。
拉杰夫
我在不同分区之间的数据分布有问题。
示例:
创建表t
按哈希 (X) 划分 (
分区32
储存在 (VRI)
作为
(SELECT C作为T ( ds.X 作为 VARCHAR2 (20))作为 X,
来自测试ds );
)
/
在这里,ds.x包含唯一的记录,当我执行此脚本时,所有记录都存储在一个分区下,而不是所有32个不同的分区。
同样,当我插入具有不同唯一编号的任何新记录 (以上执行完成后) 时,它可以工作并经过不同的分区。
非常感谢您的帮助。
拉杰夫。
嗨,
让我详细说明一下,也包括我对此的分析。
I am creating a table using CT作为 with only one column X having dataype VARCHAR2(20). This is one simple table and not nested one.
示例如下:
创建表test1
NOLOGGING
PARTITION BY H作为H (X)
(分区第 _ 1部分
表空间VRI,
分区第2部分
表空间VRI,
分区第3部分
表空间VRI,
分区部分 _ 4
表空间VRI,
分区部分 _ 5
表空间VRI,
分区部分 _ 6
表空间VRI,
分区部分 _ 7
表空间VRI,
分区部分 _ 8
TABLESPACE VRI) 作为 (SELECT C作为T ( ds.X 作为 VARCHAR2(20))作为 X
来自测试ds,其中rownum<= 50000);
表test1从表 “测试” 中检索记录,该表具有类似的配置 (分区编号和类型),其列也具有主键约束。
我的分析:
名为test的表在所有分区中具有数据,如
PART_1 -100000记录
第2部分-100005记录
----- PART_8 100000记录
当我执行上述操作时,将过滤器设置为rownum<= 50000,尽管我知道它从表 “test” 的PART_1中获取记录
执行后,所有记录都存储在表 “test1” 的PART_1中
我的问题是,为什么oracle不会在表 “test1” 中的所有8个分区中分散记录?
它如何记住表 “测试” 的分区名称。
同样,如果我从表 “test” 的PART_4中获取记录,则存储在表 “test1” 的PART_4中。
非常感谢您的帮助。
拉杰夫
专家解答
无论如何,测试中的X是:
-长于20个字符
-带有固定/通用的起始字符串
?
如果是这样,您对varchar2(20) 的演员表将默默地修剪其余字符。因此,所有行都将具有相同的值,并最终在相同的分区中!
如果不是这样,请提供一个脚本,显示如何为源表 (测试) 生成数据。当强制转换不修剪数据时,这些值对我来说分布在分区上很好:
-长于20个字符
-带有固定/通用的起始字符串
?
如果是这样,您对varchar2(20) 的演员表将默默地修剪其余字符。因此,所有行都将具有相同的值,并最终在相同的分区中!
create table t as select lpad(rownum, 32, '0') x from dual connect by level <= 1000; create table t1 partition by hash (x) partitions 8 as select cast(x as varchar2(20)) x from t; select x, count(*) from t1 group by x; X COUNT(*) 00000000000000000000 1,000 select uo.subobject_name, count(*) from t1 t, user_objects uo where dbms_rowid.rowid_object(t.rowid) = uo.data_object_id group by uo.subobject_name order by 1; SUBOBJECT_NAME COUNT(*) SYS_P16916 1,000
如果不是这样,请提供一个脚本,显示如何为源表 (测试) 生成数据。当强制转换不修剪数据时,这些值对我来说分布在分区上很好:
drop table t purge; drop table t1 purge; create table t as select rownum x from dual connect by level <= 1000; create table t1 partition by hash (x) partitions 8 as select cast(x as varchar2(20)) x from t; select uo.subobject_name, count(*) from t1 t, user_objects uo where dbms_rowid.rowid_object(t.rowid) = uo.data_object_id group by uo.subobject_name order by 1; SUBOBJECT_NAME COUNT(*) SYS_P16919 130 SYS_P16920 136 SYS_P16921 114 SYS_P16922 98 SYS_P16923 121 SYS_P16924 140 SYS_P16925 145 SYS_P16926 116
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




