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

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

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

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

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

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

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

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;
Другие вопросы по тегам