当前位置: 代码迷 >> Oracle管理 >> 分区表如何查询比不分区还要慢
  详细解决方案

分区表如何查询比不分区还要慢

热度:251   发布时间:2016-04-24 04:11:17.0
分区表怎么查询比不分区还要慢?
在实际应用中有两个表,数据量有几千W,两个表的关系是1对多的,涉及数据量大查询慢,项目经理让我建立分区表,所以我建了两个测试表,往主表填500W,从表填了1500W,根据百度的方法用我是根据ID来建分区的,用了range 建立分区:
 PARTITION  BY  RANGE (ID) 

      PARTITION  part1 VALUES  LESS  THAN (2500000) TABLESPACE  Part1_tb, 
      PARTITION  part2 VALUES  LESS  THAN (MAXVALUE) TABLESPACE    Part2_tb 
); 
 
我把两个表都建立分区了,都是根据主表的那个ID来分区的,也建立了分区索引:
create index create_date_ind2 on par_table(xxxx)local
 可是怎么我查询的时候比不建立分区还要慢。还有建立分区之后查询语句需不需改修?我用得是原本的语句.....
------解决思路----------------------
语句提供下,最好也提供下执行计划
------解决思路----------------------
分区表主要用来方便管理,对性能的影响视具体情况,并没有分区就能提高效率的说法。一般不通过id来分区
------解决思路----------------------
分区在不同的物理磁盘(不是逻辑分区)、并且同时从多个分区取数据时,才有可能比单个分区快。
这只是因为多个磁盘比单个磁盘读同样多的数据快而已。
没有分区肯定能提高性能的说法。
------解决思路----------------------
从少量分区查找比较快的前提是多次查询。
因为数据比较集中,有可能一起留在缓存中,这个其实通过聚集索引也可以做到。
------解决思路----------------------
查询分区表如果不能在你的sql查询条件里面对分区字段进行定义,就没法形成分区消减。如果你需要对全表数据进行扫描那你分区还有什么意义呢?
分区字段主要是看你的业务,一般使用时间,地域,部分等标识明显的字段。
------解决思路----------------------
1.你的查询语句语句没有贴出来,有可能你用id作为分区条件,但是最后查询时候
    没有直接用id作为查询条件(例如有可能你的sql是这样select  name from t where  (id+1)>1000)
  ,这样分区查询会更慢。
2.这种情况上面好多人都提到了,就是你的分区不够合理。
  相关解决方案