关于hash分区的问题 如何确定分区 本帖最后由 cx170817965 于 2011-06-09 11:48:40 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 ORACLE自己的HASH分区规则,看到过网上有篇对次规律试验的文章,你找找看感觉你按年份进行HASH分区不太合适把,用范围分区(range)和列表分区(list)不是更好?什么需求? hash 分区貌似是没规律的。。 根据hash值 来进行均分。 hash分区,数据存放在那个分区,取决于hash()函数,也就是有oracle自己来做,用户不能控制数据存放在那个分区。一般hash分区,个数为偶数个,或者说2的幂次个; 楼主,年份用range即范围分区最为适合。create table t_partition_test ( ID number not null, c_text varchar2(200), c_date date not null ) partition by range(c_date) ( partition P201101 values less than(to_date('20110201','yyyymmdd')), partition P201102 values less than(to_date('20110301','yyyymmdd')), partition PMAX values less than(MAXVALUE))--注意less than是“小于”,并非小于等于。这里为内容简洁,只分了三个区。--插入测试数据insert into t_partition_test (ID, C_TEXT, C_DATE)values (1, 'a', to_date('01-01-2011', 'dd-mm-yyyy'));insert into t_partition_test (ID, C_TEXT, C_DATE)values (2, 'b', to_date('02-02-2011', 'dd-mm-yyyy'));insert into t_partition_test (ID, C_TEXT, C_DATE)values (3, 'c', to_date('02-03-2011', 'dd-mm-yyyy'));--若查看201102月份数据,sql如下:SELECT * FROM t_partition_test PARTITION(P201102)结果集如下:1 2 b 2011/2/2 现在是对大概30年的数据进行分区 目前每年最多10W数据 考虑以后业务增加最多20W 对受理登记表有当事人、受理编号、受理时间、审批时间列,查询的时候会对受理时间或者审批时间进行范围查询,对当事人或者受理编号是模糊查询,如何分区能让数据查询变快呢?我对年份进行分区,200W数据需要15秒 这个表 暂时不准备创建索引 -- 当你表非常大,又找不到合适的分区键的时候才考虑 hash分区,-- 而根据你现在的情况,你最好先考虑用年份(日期时间)来范围分区,先别去考虑 hash分区! 百万级的记录ORACLE查询起来并不费力啊,把你查询的语句发出来看看。另建议备份原表数据,重建表,重建分区。 具体的分区要看你的的实际情况了。是采取哪种分区形式了。是采取hash,还是list分区。 hibernate 操作数据库问题(在线等) 如何MFC编程让一台oracle客户端连接oracle服务器 redhat Linux9下安装oracle10g报错Error in writing to directory 一个查询语句,请各位帮帮忙。 oracle中Blob字段 32K 写入问题 SQL 的别名中,遇到的问题!!!!!!!!!!!!!!!! 一個表中反復查詢的問題!!!!急急急(解決驪上結貼) 请问blob类型的数据怎么相加呢? *的问题 这样的SQL语句怎麽写?急~~~~ 如何实现oracle的比较 PLSQL 乱码问题
感觉你按年份进行HASH分区不太合适把,用
范围分区(range)和列表分区(list)不是更好?什么需求?
用户不能控制数据存放在那个分区。
一般hash分区,个数为偶数个,或者说2的幂次个;
(
ID number not null,
c_text varchar2(200),
c_date date not null
)
partition by range(c_date)
(
partition P201101 values less than(to_date('20110201','yyyymmdd')),
partition P201102 values less than(to_date('20110301','yyyymmdd')),
partition PMAX values less than(MAXVALUE)
)
--注意less than是“小于”,并非小于等于。这里为内容简洁,只分了三个区。
--插入测试数据
insert into t_partition_test (ID, C_TEXT, C_DATE)
values (1, 'a', to_date('01-01-2011', 'dd-mm-yyyy'));insert into t_partition_test (ID, C_TEXT, C_DATE)
values (2, 'b', to_date('02-02-2011', 'dd-mm-yyyy'));insert into t_partition_test (ID, C_TEXT, C_DATE)
values (3, 'c', to_date('02-03-2011', 'dd-mm-yyyy'));--若查看201102月份数据,sql如下:
SELECT * FROM t_partition_test PARTITION(P201102)
结果集如下:
1 2 b 2011/2/2
现在是对大概30年的数据进行分区 目前每年最多10W数据 考虑以后业务增加最多20W
对受理登记表有当事人、受理编号、受理时间、审批时间列,查询的时候会对受理时间或者审批时间进行范围查询,对当事人或者受理编号是模糊查询,如何分区能让数据查询变快呢?
我对年份进行分区,200W数据需要15秒
这个表 暂时不准备创建索引
-- 当你表非常大,又找不到合适的分区键的时候才考虑 hash分区,
-- 而根据你现在的情况,你最好先考虑用年份(日期时间)来范围分区,先别去考虑 hash分区!
另建议备份原表数据,重建表,重建分区。