0

我有一个复杂的 Oracle 视图,执行大约需要 2 - 3 秒。

我正在尝试将 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 回答