2

私はOracle 10を使用しています。次のような更新ステートメントがあります。

update table1 t1 
   set v_value=(select v_value 
                from table2 t2 
                where t2.user_id=t1.user_id  
                  and t2.item_id=t1.item_id  )

機能しますが、時間がかかりすぎます。どうすれば最適化できますか?

4

2 に答える 2

3

マージステートメントを試すことができます:

merge into table1 t1
using
(
   select user_id,
          item_id,
          v_value
   from table2
) t2 ON (t1.user_id = t1.user_id and t1.item_id = t1.item_id)
when matched then update
  set v_value = t2.v_value;

(構文を確認する必要があるかもしれません。MERGE のどの部分が必須で、10 から 11 の間ではない部分にも同じ変更がありました - 長い間 10g を使用していません)

于 2012-06-23T09:20:33.517 に答える
-3

文を見ただけで調整することはほとんど不可能です。Explain Plan を取得すると、フル テーブル スキャンを使用しているかどうかがわかります (autotrace をオンに設定します)。また、odbtools.com に投稿したばかりの無料ツールを使用することもお勧めします。これにより、ステートメントを分析して説明計画を生成できます。完全なテーブル スキャンがあり、選択部分でインデックスが使用されていないかどうかが表示されます。

于 2012-06-24T00:48:23.073 に答える