BatchUpdate с использованием представления Oracle

У меня есть сложное представление Oracle, выполнение которого занимает около 2-3 секунд.

Я пытаюсь вставить значения из представления Oracle в таблицу.

Я использую JdbcTemplate BatchUpdate() для вставки нескольких значений в таблицу.

В BatchUpdate() для установки значений используется PreparedStatement.

Будет ли использование представления Oracle вызывать какие-либо проблемы с производительностью?

С помощью PreparedStatement операторы SQL предварительно компилируются. Но в случае VIEW будет ли представление выполняться каждый раз при запуске запроса на вставку?


person Swadeesh    schedule 03.03.2013    source источник


Ответы (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;
person Ronnis    schedule 03.03.2013