达梦INJECT_HINT功能

INJECT_HINT功能介绍:

提供无需修改SQL语句但依然能按照指定的 HINT 运行语句的相关功能。

使用限制

INI 参数 ENABLE_INJECT_HINT 需设置为 1;
(ENABLE_INJECT_HINT 默认值:0; 动态,会话级;是否启用 SQL 指定 HINT 的功能,0:不启用;1:启用)

SQL 只能是语法正确的增删改查语句;
SQL 会经过系统格式化,格式化之后的 SQL 和指定的规则名称必须全局唯一;
HINT 一指定,则全局生效;
系统检查 SQL 匹配时,SQL_TEXT部分必须完全匹配(多一个空格也不行),不能对sql格式化,否则匹配不上不会走指定的hint,老期的版本只支持全语句的匹配。

使用方法

SF_INJECT_HINT(‘需要加hint的sql(支持绑定变量)’,‘INDEX(TEST,IDX_TEST_ID)’, ‘INJECT1’, ‘test injecting hint’, TRUE);
INDEX(TEST,IDX_TEST_ID) --该项为所加的hint
INJECT1 --指定名称,可不指定,则系统自动创建
test injecting hint --指定的hint描述,可为NULL
TRUE --规则是否生效,可为NULL,默认为TRUE

示例:

SQL> create table test(id int,info varchar);
操作已执行

SQL> insert into test select level,'a' from dual connect by level <=10000;
影响行数 10000


SQL> create index idx_test_id on test(id);
操作已执行

SQL> stat 100 on test(id);
操作已执行

SQL> explain select * from test where id>1; --正常是走全表扫描
1   #NSET2: [1, 9999, 60] 
2     #PRJT2: [1, 9999, 60]; exp_num(3), is_atom(FALSE) 
3       #SLCT2: [1, 9999, 60]; TEST.ID > 1
4         #CSCN2: [1, 10000, 60]; INDEX33555470(TEST)

SQL> sp_set_para_value(1,'ENABLE_INJECT_HINT',1); --开启ENABLE_INJECT_HINT参数
DMSQL 过程已成功完成

SQL> SF_INJECT_HINT('select * from test where id>1;','INDEX(TEST,IDX_TEST_ID)','INJECT1','test injecting hint', TRUE,TRUE);指定该语句使用IDX_TEST_ID索引
DMSQL 过程已成功完成

SQL> explain select * from test where id>1; --再次查询走了索引
1   #NSET2: [10, 9999, 60] 
2     #PRJT2: [10, 9999, 60]; exp_num(3), is_atom(FALSE) 
3       #BLKUP2: [10, 9999, 60]; IDX_TEST_ID(TEST)
4         #SSEK2: [10, 9999, 60]; scan_type(ASC), IDX_TEST_ID(TEST), scan_range(1,max]

使用SF_DEINJECT_HINT 删除 SQL增加的HINT规则
SF_DEINJECT_HINT(‘INJECT1’);

使用SF_ALTER_HINT禁用或启用已指定的HINT规则
SF_ALTER_HINT(‘INJECT1’, ‘STATUS’, ‘DISABLED’);

可通过SYSINJECTHINT视图查看已添加的HINT规则;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值