Oracle update文のwhere句でバインド配列とin句はどちらが速いのか
Oracleでバインド変数を使って複数件更新するupdate文を実行する際、
①バインド変数を配列にする
②where句にin句を使用する
どちらが速いのでしょうか?
SQL例
1
1update table1 set item1 = 1 where key1=:key1 and key2=:key2 and key3=:key3;(各keyは3件の配列)(table2でも同じ作り)
2
1update table1 set item1 = 1 where key1=:key1 and key2=:key2 and key3 in (:key31,:key32,:key33); 2update table2 set item1 = 1 where key1=:key1 and (key2,key3) in ((:key21,:key31),(:key22,:key32),(:key23,:key33));
更新条件はテーブルのプライマリーキーで、件数は不定なので、②のin句は動的に作成します。
実際に更新しようとしているテーブルは2種類で、更新条件は
table1はプライマリーキーのうち1項目のみが複数になる。
table2はプライマリーキーのうち複数項目が複数の組み合わせになる。
知りたいこととしては、バインド配列とin句はどちらが速いのか、ですが、
もし、一般的にはバインド配列よりin句の方が速かったとしても、例②(2)のようなSQLの場合はバインド配列の方が速そうな気がします。
調べてみましたがあまり情報が得られず、質問させていただきました。
回答2件
あなたの回答
tips
プレビュー