为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:8
【操作系统】:
【CPU】:
【问题描述】*:
SP_SET_PARA_VALUE(1,'ENABLE_INJECT_HINT',1);
SF_INJECT_HINT('SELECT * FROM AM_LIST_DATA WHERE LIST_ID=', 'TOP_ORDER_OPT_FLAG(5)', 'test_INJECT', 'to list query2', TRUE, NULL);
SELECT * FROM AM_LIST_DATA WHERE LIST_ID= '8a845097c3944251856959734a5a4a8b'
order by create_time desc limit 0, 10;
这个查询语句没有用上复合索引 (list_id,create_time desc).
我在没有设置hint之前用的是
select /+TOP_ORDER_OPT_FLAG(5)/* from
am_list_data
WHERE list_id = '8a845097c3944251856959734a5a4a8b'
order by create_time desc limit 0, 10;
这样很快。然后我就开始设置hint了。设置完了之后再查询用不上了。然后我给这个hint设置删掉,再用这个语句查,也用不上复合索引了,不知道发生了什么,求教
SQL_TEXT中字符串要是原始SQL的格式,否则匹配不上
https://eco.dameng.com/document/dm/zh-cn/pm/sql-appendix
这样很快,SQL就保留这样呗,不是非得要注入,带在SQL里看的明明白白的,也更好维护
select /+TOP_ORDER_OPT_FLAG(5)/* from
am_list_data
WHERE list_id = '8a845097c3944251856959734a5a4a8b'
order by create_time desc limit 0, 10;
1、注入的hint语句应该是一模一样的,包括LIST_ID=参数值 order by create_time desc limit 0, 10;
2、复合索引那里更新下索引和对应列统计信息再看看呢
达梦的hint 就是设置了 也未必生效的。这个是正常现象。应该还是有个类似比重的数值,在两种执行计划 计算代价都差不多的时候,hint才管用。
SF_INJECT_HINT(SQL_TEXT=>'SELECT * FROM AM_LIST_DATA WHERE LIST_ID=', HINT_TEXT=>'TOP_ORDER_OPT_FLAG(5)', NAME=> 'test_INJECT', VALIDATE=>TRUE, DESCRIPTION=>'to list query2', FUZZY=>TRUE);
尝试运行上述过程再试一试