Oracle性能优化-SQL优化(案例二)

DB:Oracle 11.2.0.1.0
问题:客户反馈销售订单保存有时很慢。
问题分析:问题重现后,查看后台数据库正在执行的SQL,找到了引起操作慢的SQL,执行计划如下


其中SQL中引用了临时表ic_temp_atpdim0608,每次查询都使用同一个SQL文本,重用同一个执行计划,即使临时表数据每次差距特别大也会使用同一个执行计划,导致SQL效率问题;
解决方案:
改写SQL,需要在代码里将这个耗时SQL语句添加动态随机数的HINT,以避免执行计划重用,提高执行计划准确性(也可以通过添加、修改SQL注释信息comment on column ...生成一次新的执行计划);
例如:
原SQL:
select atptable.pk_group pk_group...... from ......;
更改后的SQL:
select /*+随机数*/ atptable.pk_group pk_group...... from ......;
可以使用类似如下方式增加随机数;
String sql="select /*+ "+new java.util.Random().nextDouble()+" */ col"

一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一




