使用Oracle视图进行BatchUpdate



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

我正在尝试从Oracle视图插入值到表。

我使用JdbcTemplate BatchUpdate()将多个值插入到表中。

在BatchUpdate()中,使用PreparedStatement来设置值。

使用Oracle视图会导致性能问题吗?

通过使用PreparedStatement, SQL语句被预编译。但是对于VIEW,是否每次插入查询被触发时都要执行视图呢?

视图就是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;

相关内容

  • 没有找到相关文章

最新更新