本帖最后由 cx170817965 于 2011-06-09 11:48:40 编辑

解决方案 »

  1.   

    ORACLE自己的HASH分区规则,看到过网上有篇对次规律试验的文章,你找找看
    感觉你按年份进行HASH分区不太合适把,用
    范围分区(range)和列表分区(list)不是更好?什么需求? 
      

  2.   

    hash 分区貌似是没规律的。。 根据hash值  来进行均分。
      

  3.   

    hash分区,数据存放在那个分区,取决于hash()函数,也就是有oracle自己来做,
    用户不能控制数据存放在那个分区。
    一般hash分区,个数为偶数个,或者说2的幂次个;
      

  4.   

    楼主,年份用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
      

  5.   


    现在是对大概30年的数据进行分区   目前每年最多10W数据   考虑以后业务增加最多20W   
    对受理登记表有当事人、受理编号、受理时间、审批时间列,查询的时候会对受理时间或者审批时间进行范围查询,对当事人或者受理编号是模糊查询,如何分区能让数据查询变快呢?
    我对年份进行分区,200W数据需要15秒  
    这个表 暂时不准备创建索引 
      

  6.   


    -- 当你表非常大,又找不到合适的分区键的时候才考虑 hash分区,
    -- 而根据你现在的情况,你最好先考虑用年份(日期时间)来范围分区,先别去考虑 hash分区!
      

  7.   

    百万级的记录ORACLE查询起来并不费力啊,把你查询的语句发出来看看。
    另建议备份原表数据,重建表,重建分区。
      

  8.   

    具体的分区要看你的的实际情况了。是采取哪种分区形式了。是采取hash,还是list分区。