1、表结构有3个字段:ID,DATETIME, VALUE
2、每天会产生500万条记录,因此按天进行分表,表名TABLE_YYYYMMDD,也就是每天产生一个表来存储当天的数据。一年后产生了365个表,我想对整年记录的VALUE值进行排序,取排序后的记录中的任意一段连续的100条记录怎么查呢,是不是分表有问题?效率如何保证?求解!

解决方案 »

  1.   

    可以没个季度做一次季度整合,
    每年做一个年度整合,
    查询的时候 直接从年度整合里面查询
    条件语句:
    where  rownum between "开始值" and “开始值+100”
      

  2.   

    [Quote=引用 6 楼 lxyzxq2008 的回复:]引用 3 楼 huaqin 的回复:引用 2 楼 bin3509 的回复:弄个时间分区分区后对365个表进行联合查询速度能提升多少?
    分区了,就没必要联合查询了啊?
    需要那段就查那个分区,不需要在意其他的分区,这样你的速度就快多了啊
    [/Quote
    我没有用过分区,你的意思是分区后就不需要分表了是吗?比如如果不分表一年后一个表的数据就有72亿条记录,一个72亿行记录的表在分区的情况下,我要按某字段的值进行排序然后取某期间的值能保证效率吗?注意的是这里涉及到排序,记录的值可能是零散的分布在不同的分区里的。
      

  3.   

    在检索前收集统计情报也可以大幅提高性能。    DBMS_STATS.GATHER_TABLE_STATS(
            OWNNAME       => 'schema'
            ,TABNAME      => 'table_name'
            ,METHOD_OPT   => 'FOR ALL INDEXED'
            ,CASCADE      => FALSE
        );    DBMS_STATS.GATHER_INDEX_STATS(
            OWNNAME   => 'schema',
            INDNAME   => 'index_name'
        );
      

  4.   

    简单说就是让oracle知道表里有什么样的数据(统计情报),这样在检索时可以加快速度。
    你把上面的语句中的schema名和表名换成你的,执行就可以了。
      

  5.   

    建了分区字段后!假如你是分4个季度分区,可以where 分区字段 between 季度1 and 季度4 
      

  6.   

    有做过测试吗,这样性能能提高多少?因为我理解最终oracle还是要从4个分区中拿到所有数据进行排序(或许4个分区放在不同的物理机上可以减轻磁盘的IO压力吧,但是这样不会不会同时增加了网络IO的压力呢),如果只是对其中某分区查询是会提高速度,因为实际上相当是单表数据量变少了。
      

  7.   

    分区字段可以是VALUE,这样的话全年的记录会按照VALUE的值插入到不同的分区,然后在分区内排序
      

  8.   

    因为用户也会选择某时间段(如跨几个季度)进行排序查询,此时如果纯粹按照VALUE进行分区的话还是会跨越几个分区进行排序查询的