添加索引后更新查询的性能问题

时间:2016-06-06 07:58:29

标签: mysql oracle11g

我已将索引添加到我的更新查询中,并添加相同的查询开始需要几个小时来完成该过程。虽然没有索引它在几分钟内完成我已经添加索引以加快进程但是它变得非常慢与我的愿望相反。 以下是我的代码的示例代码段。

Cursor c_updt_stg_rsn is
   select distinct substr(r.state_claim_id, 1, 12), ROWID
    from nemis.stg_state_resp_rsn r
    WHERE  r.seq_resp_plan_id = v_seq_resp_plan_id
   and r.submitted_claim_id is null
   and r.filler_2 is null;

  BEGIN

  OPEN c_updt_stg_rsn;
  LOOP

    FETCH c_updt_stg_rsn BULK COLLECT
      INTO v_state_claim_id, v_rowid LIMIT c_BULK_SIZE;

    FORALL i IN 1 .. v_state_claim_id.COUNT()

      UPDATE /*+ index(STG_STATE_RESP_RSN,IDX2_STG_STATE_RESP_RSN) */ nemis.stg_state_resp_rsn
         SET (submitted_claim_id , filler_2) = (SELECT DISTINCT submitted_claim_id, sl_group_id FROM nemis.state_sub_Resp_dtl D WHERE 
                                                                                       (d.state, d.type_of_claim) in (select distinct state, type_of_claim
                                                                                                                      from nemis.resp_match_state
                                                                                                                      where seq_resp_match_table_level_id in
                                                                                                                       (select seq_resp_match_table_level_id
                                                                                                                        from nemis.resp_match_table_level
                                                                                                                        where seq_resp_plan_id = v_seq_resp_plan_id))
                                                                                                                        AND resp_state_claim_id LIKE v_state_claim_id(i)||'%'
                                                                                                                       )
       WHERE  ROWID = v_rowid(i);

    IF v_state_claim_id.COUNT() != 0 THEN
      v_cnt_rsn := v_cnt_rsn + SQL%ROWCOUNT;
    END IF;
   COMMIT;
    EXIT WHEN c_updt_stg_rsn%NOTFOUND;
  END LOOP;
  CLOSE c_updt_stg_rsn;

0 个答案:

没有答案