现有两个表poi、ADI,都是7百万条记录左右。对POI按一个字段NUMBER(1),建成了4个分区。对ADI表建了4个散列分区。
结果:
优化前:
select count(*) from poi a,结果为6百多万,执行时间2.83秒select count(*) from adi a,结果为7百多万,执行时间0.328秒优化后:
select count(*) from poi a,执行时间37.8秒select count(*) from adi a,结果为7百多万,执行时间5.672秒
为什么不能提高效率,反而下降呢?盼各位仁兄不吝赐教。

解决方案 »

  1.   

    想用分区来提高性能,只是在表上做分区是远远不够的。还需要对分区也做索引。按照你上面列出来的这种语句,分区是不能明显提高性能的。但是,如果你把语句按照分区来做count(*),应该就会有提高了。分区提高性能并不是仅仅在数据量大的情况下。而且并不一定是完全为了查询性能(特别是你的这种全表扫描的统计查询)才分区。分区的本质是降低I/O。
      

  2.   

    不好意思,刚刚应该是“还需要对索引也分区”。分区表上的索引,除了常用的,还有local索引和global索引。分区对性能的提升主要靠这两种索引。一般而言,如果查询能明确在哪个分区上,用local索引比较好;否则,用global索引比较好。至于hash分区,个人认为,它对性能的提升在全表扫描的查询上未必明显。