0

実行に約2〜3秒かかる複雑なOracleビューがあります。

Oracleビューからテーブルに値を挿入しようとしています。

JdbcTemplate BatchUpdate()を使用して、テーブルに複数の値を挿入しています。

BatchUpdate()では、PreparedStatementを使用して値を設定します。

Oracleビューを使用すると、パフォーマンスの問題が発生しますか?

PreparedStatementを使用すると、SQLステートメントがプリコンパイルされます。しかし、VIEWの場合、挿入クエリが実行されるたびにビューが実行されますか?

4

1 に答える 1

1

ビューは単なるSQLステートメントです。それらは、基礎となるSQLクエリよりも遅くも速くもありません。

ただし、他の複雑なビューの上に構築された複雑なビュー(マルチテーブルの結合と集計)を使用すると、オプティマイザーが混乱して自分自身をアウトスマートにしようとし、実行プランが非常に悪くなる可能性があります。制約がなく、参照整合性が設定されていない場合、問題はさらに悪化する傾向があります。

最後の注意点は、データベースからデータを引き出して元に戻すだけの場合は、代わりにデータベースで操作全体を実行する方がパフォーマンスが向上する可能性があるということです。たとえば、データベースから「注文明細」を取得してから、「注文ヘッダー」を「注文合計数量」で更新するとします。この場合、代わりに次のようなことを行う必要があります。

merge
 into order_header h
using (select order_id, sum(order_qty) as order_total_qty
         from order_line
        group by order_id
       ) l
   on (h.order_id = l.order_id)
when matched then
   update
      set h.order_total_qty = l.order_total_qty;
于 2013-03-03T18:53:11.270 に答える