4

Oracle SQLでwhere句を実行しているときの友達は、私が持っていると仮定します

UPDATE schema1.TBL_SCHEMA1_PROCESS_FEED F
                 SET F.TBL_SCHEMA1_PROCESS_LINE_ID      = V_LINE_ID,
                     F.TBL_SCHEMA1_PROCESS_LINE_TYPE_ID = V_LINE_TYPE_ID,
                     F.TBL_SCHEMA1_PROCESS_LINE_SUB_TYPE_ID = V_SUB_TYPE_ID,
               WHERE F.CURR_DATE = V_CURR_DATE  
               AND   F.NEXT_DATE = V_NEXT_BUSINESS_DATE OR F.NEXT_DATE IS NULL;

このコードを条件に合わせて最適化する方法

F.NEXT_DATE = V_NEXT_BUSINESS_DATE OR F.NEXT_DATE IS NULL
4

1 に答える 1

5

それはあなたの実際のwhere条項ですか?あなたはそれが次のようになることを意味しますか?

WHERE F.CURR_DATE = V_CURR_DATE  
  AND ( F.NEXT_DATE = V_NEXT_BUSINESS_DATE 
        OR F.NEXT_DATE IS NULL )

その場合は、可能であれば一意のインデックスが必要curr_dateです。

これにより実行時間が十分に改善されることに満足できない場合は、に拡張することを検討してcurr_date, next_dateください。必要がない場合は、より大きなインデックスを作成しないでください。

また、条件を少し変更することを検討することもできますが、それが大きな違いを生むとは思えません。

WHERE F.CURR_DATE = V_CURR_DATE  
  AND NVL(F.NEXT_DATE, V_NEXT_BUSINESS_DATE) = V_NEXT_BUSINESS_DATE 

最善のオプションは、を使用して更新することrowidです。より多くの情報がなければ、これが可能な状況にあるかどうかを知ることは不可能ですが、rowidはテーブル内の一意のアドレスであるため、単一の行を更新する場合、常にインデックスよりも高速です。このテーブルからデータを収集し、テーブルに書き戻す前に変数を設定する場合、これは可能です。

それらは実際のスキーマ名とテーブル名ですか...もしそうなら、もっとわかりやすいものを選ぶことを考えてみませんか?

于 2012-05-05T12:05:20.323 に答える