我有个表大概有4000多万条记录,查询很慢,我按照范围分区,对其进行了分区,分区后发现select count(*) from daysum;非常慢,比分区前慢很多,到底什么原因导致的呢?表的结构如下:PFUID NOT NULL NUMBER(6)
NPRODUCTID NOT NULL NUMBER(8)
NSTOCKID NOT NULL NUMBER(6)
DTTIME NOT NULL DATE
FQTY NUMBER(14,2)
MPRICE NUMBER(20,2)
MATPRICE NUMBER(22,4)
原表是用DTTIME 做的索引,我也是用DTTIME按照范围分区的,每个月数据为一个分区。
请高手予以解答。

解决方案 »

  1.   

    分区后select count(*) from daysum;当然会以前慢,oracle的分区的目的就是具有相同特性的数据归类,以便缩小查找范围.如果你的语句是select count(*) from daysum where DTTIME < sysdate - 100;
    就会快很多很多;如果你不用DTTIME条件的话,你的性能只会慢不会快的
      

  2.   

    4000多万条记录,查询很慢,我按照范围分区,对其进行了分区,分区后发现select count(*) from daysum;非常慢,比分区前慢很多
    ----------------
    晕了,对表分区是干这个用的吗????? 南辕北辙,缘木求鱼,不慢就怪了。
      

  3.   

    如果楼主真想要个快的 select count(*) from daysum面对这样大的一个业务表,每次都去对这巨多数量的表检索一番,只为得到一个条数,显然极其不明智。只能用变通的方法,就是另建一个统计表作计数,daysum每增加一条记录,就对统计表里相应字段作增1更新。统计可以根据daysum的情况进行细分,如每月一个字段或一行记录。
      

  4.   

    试试看:
    select /*+ use_hash(a) */ count(*) from daysum a
      

  5.   

    另外,我现在装的oracle9.0.2.7只支持范围分区,别的分区不支持,不知道为什么?