我是靠谱客的博主 温柔乌龟,最近开发中收集的这篇文章主要介绍达梦-SF_INJECT_HINT,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、SF_INJECT_HINT函数的作用
提供无需修改SQL语句但依然能按照指定的 HINT 运行语句的相关功能。
二、使用限制
INI 参数 ENABLE_INJECT_HINT 需设置为 1;
SQL 只能是语法正确的增删改查语句;
SQL 会经过系统格式化,格式化之后的 SQL 和指定的规则名称必须全局唯一;
HINT 一指定,则全局生效;
系统检查 SQL 匹配时,必须是整条语句完全匹配,不能是语句中子查询匹配。
三、使用方法
SF_INJECT_HINT(‘需要加hint的sql(可以不需要具体的参数)’,‘NO_USE_CVT_VAR ENABLE_INDEX_JOIN(0)’, ‘INJECT1’, ‘to testfunction of injecting hint’, TRUE);
NO_USE_CVT_VAR ENABLE_INDEX_JOIN(0) --该项为所加的hint
SF_DEINJECT_HINT(‘INJECT1’); —使INJECT1所对应的sql所加的hint失效
INJECT1 --指定名称,可不指定,则系统自动创建
to testfunction of injecting hint --指定的hint描述,可为NULL
TRUE --规则是否生效,可为NULL,默认为TRUE
例:
为sql语句SELECT * FROM T1,T2 WHERE T1.ID = T2.ID指定NO_USE_HASH(T1,T2) ENABLE_INDEX_JOIN(0)的hint
准备数据:
CREATE TABLE T1 (ID INTEGER,NAME VARCHAR(128));
CREATE TABLE T2 (ID INTEGER,NAME VARCHAR(128));
当没有添加hint之前,执行计划如下
EXPLAIN SELECT * FROM T1,T2 WHERE T1.ID = T2.ID;
1 #NSET2: [0, 1, 104]
2 #PRJT2: [0, 1, 104]; exp_num(4), is_atom(FALSE)
3 #HASH2 INNER JOIN: [0, 1, 104]; KEY_NUM(1);
4 #CSCN2: [0, 1, 52]; INDEX33557117(T1)
5 #CSCN2: [0, 1, 52]; INDEX33557118(T2)
使用sql语句中添加hint的方式,查询计划如下
EXPLAIN SELECT /+ NO_USE_HASH(T1,T2) ENABLE_INDEX_JOIN(0)/* FROM T1,T2 WHERE T1.ID = T2.ID;
1 #NSET2: [0, 1, 104]
2 #PRJT2: [0, 1, 104]; exp_num(4), is_atom(FALSE)
3 #HASH2 INNER JOIN: [0, 1, 104]; KEY_NUM(1);
4 #CSCN2: [0, 1, 52]; INDEX33557118(T2)
5 #CSCN2: [0, 1, 52]; INDEX33557117(T1)
使用SF_INJECT_HINT为sql添加hint以后,执行计划如下
SF_INJECT_HINT(‘SELECT * FROM T1,T2 WHERE T1.ID = T2.ID’,‘NO_USE_HASH(T1,T2) ENABLE_INDEX_JOIN(0)’,‘INJECT1’,‘to testfunction of injecting hint’, TRUE);
EXPLAIN SELECT * FROM T1,T2 WHERE T1.ID = T2.ID
1 #NSET2: [0, 1, 104]
2 #PRJT2: [0, 1, 104]; exp_num(4), is_atom(FALSE)
3 #HASH2 INNER JOIN: [0, 1, 104]; KEY_NUM(1);
4 #CSCN2: [0, 1, 52]; INDEX33557118(T2)
5 #CSCN2: [0, 1, 52]; INDEX33557117(T1)
查看执行计划,发现和在sql中添加hint的方式一样
四、使用SF_DEINJECT_HINT对指定 SQL 撤回已增加HINT
SF_DEINJECT_HINT(‘INJECT1’); --使INJECT1对应的sql所加的hint失效
五、使用SF_ALTER_HINT禁用或启用已指定的hint规则
SF_ALTER_HINT(‘INJECT1’, ‘STATUS’, ‘DISABLED’);

最后

以上就是温柔乌龟为你收集整理的达梦-SF_INJECT_HINT的全部内容,希望文章能够帮你解决达梦-SF_INJECT_HINT所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部