概述
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规则;
最后
以上就是优秀康乃馨为你收集整理的达梦INJECT_HINT功能的全部内容,希望文章能够帮你解决达梦INJECT_HINT功能所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复