2009-08-12 4 views
0

私はそれを実行するのに非常に長い時間がかかり、私はいないものの計画この無関係なテーブルがスキャンされるのはなぜですか?

Operation Object Name Rows Bytes Cost Object Node In/Out PStart PStop 

SELECT STATEMENT Optimizer Mode=CHOOSE  634 K  75981         
    HASH JOIN  634 K 180 M 75981         
    HASH JOIN  845 K 234 M 8930         
     HASH JOIN  465 K 53 M 3118         
     NESTED LOOPS  620 K 15 M 1618         
      NESTED LOOPS  1 20  2         
      TABLE ACCESS BY INDEX ROWID INGENIUM.USR 1 10  1         
       INDEX UNIQUE SCAN INGENIUM.XAK1USR 1           
      TABLE ACCESS BY INDEX ROWID INGENIUM.USR 1 10  1         
       INDEX UNIQUE SCAN INGENIUM.XAK1USR 1           
      INDEX RANGE SCAN INGENIUM.SECUSREMP_USREMP 89 M 600 M 1616         
     TABLE ACCESS FULL INGENIUM.TBLEMP 620 K 55 M 1150         
     TABLE ACCESS FULL INGENIUM.TBLEMPEVT 1 M 182 M 4000         
    TABLE ACCESS FULL INGENIUM.SECUSREMP 89 M 600 M 27013 

を見て理由を理解しようとして二つのテーブル

select count(*) from ingenium.empevt, ingenium.evt where empevt_evtfk = evt_pk 

を横切っているクエリを持っていますINGENIUM.SECUSREMP_USREMPのテーブルアクセスは、膨大な数の行があります。なぜ私はそれがクエリになかったので、そのテーブルをスキャンしているのかわかりません。 INGENIUM.SECUSREMP_USREMPには、ingenium.emp.emp_pkを参照する外部キーがありますが、なぜそれが重要かはわかりません。

一見無関係なテーブルをスキャンしないようにこのクエリを書き換える方法はありますか?最初にそのテーブルをスキャンするのはなぜですか?

答えて

1

おそらくempevtとevtの両方がビューであり、テーブルではありませんか?あなたのクエリプランショー(のみ)これらのテーブルがアクセスされている:

  • USR
  • TBLEMP
  • TBLEMPEVT
  • SECUSREMP

これらのビューの定義は何ですか?もちろん間違った計画を見ているのでなければ!

+0

EMPはビューです!私はそれについても考えなかった。もし私がソーステーブルに行けば、それはすっかり早くなります。どうもありがとう。 – stimms

関連する問題