更新时间:2026-10-21 GMT+08:00
分享

AUTOHINT

功能描述

启用AUTOHINT用于指定SQL探索Hint组合,并输出能提升当前SQL执行速度的推荐Hint组合。

注意事项

  • 仅支持SELECT语句,并且需要使用者拥有super权限或管理员权限。
  • 支持的多种选项中,除ANALYZE选项外,使用其他选项时需将其置于括号内,例如:AUTOHINT (VERBOSE) statement。

语法格式

  • 使用AUTOHINT为执行SQL进行Hint推荐,支持多种选项,对选项顺序无要求。
    AUTOHINT [ (  option  [, ...] )  ] statement;
    其中选项option子句的语法为。
    {
        ANALYZE [ boolean ] |
        VERBOSE [ boolean ] |
        SQLPATCH [ boolean ] |
        TEST [ boolean ] |
        DEBUG [ boolean ]
    }

参数说明

  • statement

    指定进行Hint推荐的SQL语句(仅支持SELECT语句)。

    若SQL语句已经自带Hint,AUTOHINT将会无视已有的Hint进行推荐。例如,对于语句SELECT /*+IndexScan(t1)*/* FROM t1, t2 where t1.id = t2.id and t1.a > 20,使用AUTOHINT进行推荐后,得到的推荐结果是基于语句SELECT * FROM t1, t2 where t1.id = t2.id and t1.a > 20 的推荐结果,而非在已有的IndexScan(t1) 的基础上进行的进一步推荐。

  • ANALYZE boolean

    在进行HINT推荐前首先进行HINT探索,若关闭则根据历史HINT探索记录直接对当前SQL进行HINT推荐。

    取值范围:

    • TRUE(缺省值):在推荐前进行HINT探索。
    • FALSE:不进行HINT探索。
  • VERBOSE boolean

    显示HINT探索与推荐过程的额外信息。

    取值范围:

    • TRUE(缺省值):显示额外信息。
    • FALSE:不显示。
  • SQLPATCH boolean

    推荐HINT后输出相应的SQLPATCH指令。

    取值范围:

    • TRUE(缺省值):输出SQLPATCH指令。
    • FALSE:不输出。
  • TEST boolean

    推荐HINT后,分别执行初始查询和应用HINT后的查询来验证推荐结果,并输出实际计划执行时间。

    取值范围:

    • TRUE(缺省值):进行推荐结果验证并输出验证结果。
    • FALSE:不进行验证。
  • DEBUG boolean

    输出相对于VERBOSE选项更多的细节信息,包括每轮探索时的初始计划树及执行时间,并打印每轮探索结束后得到的探索子图,以及最终合并后总的探索图。

    取值范围:

    • TRUE(缺省值):输出细节信息。
    • FALSE:不输出。

示例1

使用AUTOHINT为慢SQL语句推荐HINT。以JOB数据集中的语句为例。

--导入JOB数据集,使用ANALYZE选项为02a查询进行HINT探索推荐。
gaussdb=# AUTOHINT ANALYZE SELECT MIN(t.title) AS movie_title
FROM company_name AS cn,
     keyword AS k,
     movie_companies AS mc,
     movie_keyword AS mk,
     title AS t
WHERE cn.country_code ='[de]'
  AND k.keyword ='character-name-in-title'
  AND cn.id = mc.company_id
  AND mc.movie_id = t.id
  AND t.id = mk.movie_id
  AND mk.keyword_id = k.id
  AND mc.movie_id = mk.movie_id;
--得到HINT推荐结果与预期提升。
gaussdb=# 
                        AUTOHINT
--------------------------------------------------------
 Recommended hintset:
   MergeJoin(@sel$1 k@sel$1 mk@sel$1 mc@sel$1 cn@sel$1)

 Expected boost:
   planning:     0%
   execution:    50%
   overall:      50%
(7 rows)

相关文档