# 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语句）。
  ![](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/public_sys-resources/notice_3.0-zh-cn.png)
  若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)
```
