升级到19c遇到的问题(一):标量子查询嵌套导致的性能问题

来源:这里教程网 时间:2026-03-03 18:45:51 作者:

从Oracle11.2.0.4 升级到Oracle19.17.0.0 后有标量子查询的sql 执行变慢。

经过排查是标量子查询转换导致的执行计划改变所致。

影响执行计划改变的参数_optimizer_unnest_scalar_sq,可以通过/*+OPT_PARAM('_optimizer_unnest_scalar_sq' 'false')*/ 的hint 来修正,

或者在标量子查询的select 部分使用/*+no_unnest*/,都能解决问题。 如果有很多类似SQL, 建议在系统级关闭:

alter system set "_optimizer_unnest_scalar_sq"=false;   

此参数在11g版本中是不存在的, 可以进行关闭不会有影响。

实验:

建表:

create table test_o as select * from dba_objects; create table test_u as select * from dba_users;

1. 无索引对比

查询sql:

SELECT u.username, (SELECT MAX(created) FROM test_o o WHERE o.owner = u.username) as max_created FROM test_u u;

执行计划,执行时间0.21s

添加hint , 执行时间0.51s,确实比开启标量子查询时要慢。

2. 建立索引后对比

无hint执行时间0.18s

添加hint 执行时间0.14s, 添加索引后不开启标量子查询转换时会快。

相关推荐