用sql profile来固定执行计划

今天一个SQL用BASELINE没搞定,BASELINE没起作用,原因还在找。
忽然想起了SQL PROFILE,就试了一下,嘿嘿,果然还不错,起作用了。
以下是个用法示例:
根据DBA_OBJECTS创建个表,OBJECT_ID列上创建索引。
按照OBJECT_ID去查询,默认的走了索引,我们看看如何让他通过SQL PROFILE去走全表扫描。

declare
     v_hints sys.sqlprof_attr;
   begin
     v_hints := sys.sqlprof_attr('full(wxh_tbd@sel$1)');----------HINT部分
     dbms_sqltune.import_sql_profile('select count(*) from wxh_tbd where object_id=:a',----------SQL语句部分
                                     v_hints,
                                     'SQLPROFILE_NAME3',--------------------------------PROFILE 的名字
                                     force_match => true);
   end;
   /
   
select count(*) from wxh_tbd where object_id=:a;

Execution Plan
----------------------------------------------------------
Plan hash value: 853361775

------------------------------------------------------------------------------
| Id  | Operation          | Name    | Rows  | Bytes | Cost (%CPU)| Time     |
------------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |         |     1 |    13 |   144   (3)| 00:00:01 |
|   1 |  SORT AGGREGATE    |         |     1 |    13 |            |          |
|*  2 |   TABLE ACCESS FULL| WXH_TBD |   198 |  2574 |   144   (3)| 00:00:01 |
------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - filter("OBJECT_ID"=TO_NUMBER(:A))

Note
-----
   - SQL profile "SQLPROFILE_NAME3" used for this statement-----------------------我们看到SQL PROFILE 起作用了



SQL PROFILE的好处是,你的SQL语句不区分大小写,回车之类的,只要文本一样就OK,这个有点比较赞。
删除SQL PROFILE
通过select * from dba_sql_profiles a;查询出PROFILE 的NAME,
然后
exec dbms_sqltune.drop_sql_profile('SYS_SQLPROF_012ed61fe9bd0000');  来删除

不过用SQL PROFILE,写HINT的时候,我测试的情况是,必须写上查询块的名称,这在一定程度上,要求对查询块比较熟悉。   

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22034023/viewspace-697116/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/22034023/viewspace-697116/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值