我有一个复杂的Oracle视图,大约需要2-3秒才能执行。
我试图将Oracle视图中的值插入表中。
我使用JdbcTemplate BatchUpdate()在表格中插入多个值。
在BatchUpdate()中,PreparedStatement用于设置值。
使用Oracle视图会导致任何性能问题吗?
通过使用PreparedStatement,SQL语句是预编译的。但是在VIEW的情况下,每次触发插入查询时都会执行视图吗?
答案 0 :(得分: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;