本帖最后由 justdoitman 于 2011-10-21 16:17:39 编辑

解决方案 »

  1.   

    不中index的话,循环执行会做更多的full table scan,情况更糟
      

  2.   

    先谢谢您的答复,我在表T_PAYMENT_DISTRIBUTION_B3YEARS的BILL_SEQ字段上建了索引.远程数据库上源表有根据LATN_ID 进程了分区。另外06年4月份后就慢下来了,应该是源表数据量猛增的关系,稍微统计了下一个月表有3000W行左右的数据(一个域的,总共三个域),符合条件的记录只有几十万行.我这里每个月份都要从三个远程数据库域来提取数据,每个域的数据量差不了多少.
      

  3.   

    修改下,是有一个域的数据量特别大,三个域的每个月月表数据量和大概是三千万行左右。比如,2700W,200w,100W这么分布。
      

  4.   

    查看一下select语句的执行计划吧
      

  5.   

    下边是一个月一个域的执行计划,在pl/sql里看的,比较简单
    SELECT STATEMENT, GOAL = ALL_ROWS 2995 11984 1653792
     FILTER
      REMOTE T_BILL_BALANCE_DETAIL_200606 2995 173913 23999994
      INDEX RANGE SCAN BILLING_GBILL IND_T_PAYDIS_B3YEARS 1 1 17
      

  6.   

    应该是下边这个:SELECT STATEMENT, GOAL = ALL_ROWS 175231 1078928 170851064
     SORT UNIQUE 175231 1078928 170851064
      UNION-ALL
       FILTER
        REMOTE T_BILL_BALANCE_DETAIL_200606 125711 14529109 2324657440
        INDEX RANGE SCAN BILLING_GBILL IND_T_PAYDIS_B3YEARS 1 1 17
       FILTER
        REMOTE T_BILL_BALANCE_DETAIL_200606 8927 955166 130857742
        INDEX RANGE SCAN BILLING_GBILL IND_T_PAYDIS_B3YEARS 1 1 17
       FILTER
        REMOTE T_BILL_BALANCE_DETAIL_200606 2995 173913 23999994
        INDEX RANGE SCAN BILLING_GBILL IND_T_PAYDIS_B3YEARS 1 1 17