oracle复杂语句,oracle 中对于复杂的SQL语句,我们常用以下步骤进行优化

对于非常复杂语句的SQL TUNING 问题,我们都是遵循下面的思路:

1. 先检查之前有没有好的执行计划,如果之前的执行计划是比较好的,那么可以使用 SQL Profile 来固定好的执行计划。

比如可以根据 note 1400903.1 的步骤,类似如下:

a). 我们有两个语句

select ename from scott.emp where ename='MILLER';

它的SQL_ID是 329d885bxvrcr ,plan hash value是 3045807146

select /*+ FULL (EMP) */ ename from scott.emp where ename='MILLER';

它的SQL_ID是 4f74t4ab7rd5y ,plan hash value是 2872589290

我们的目的就是把 4f74t4ab7rd5y 的plan转移给 329d885bxvrcr

b). 调用 coe_load_sql_profile.sql 来转移plan

比如:

SQL> @coe_load_sql_profile.sql

Parameter 1:

ORIGINAL_SQL_ID (required)

Enter value for 1: 329d885bxvrcr =======>此处填写原始的SQL的SQL_ID

Parameter 2:

MODIFIED_SQL_ID (required)

Enter value for 2: 4f74t4ab7rd5y =======>此处填写带hint的SQL的SQL_ID

Parameter 3:

PLAN_HASH_VALUE (required)

Enter value for 3: 2872589290 =======>此处填写带hint的SQL的plan hash value (期望的plan)

此时SQL Profile就产生了

c). 您可以再次验证原来的SQL的plan是否就已经按照我们的期望改变了

2. 如果之前也没有好的执行计划,那么接下来需要收集统计信息;因为优化器是根据统计信息来生成执行计划,所以最新的统计信息经常可以修正不好的执行计划。

3. 如果收集统计信息也没有能够让 SQL 性能变好,那么接下来需要使用 SQL Tuning Advisory 来帮我们优化,看是否可以找到一些建议。

我注意到您实际上已经尝试过这种方式了。

4. 如果上面的方法都不能解决问题,那么接下来就需要从 SQL 语句本身入手。

通过联系应用团队修改 SQL 逻辑来进一步优化了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值