签到成功

知道了

CNDBA社区CNDBA社区

Oceanbase Hint 清单

2023-09-05 11:24 385 0 转载 OceanBase
作者: dave

一般情况下,优化器会为用户查询选择最佳的执行计划,不需要用户使用 Hint 指定。但在某些场景下,优化器生成的执行计划可能不满足用户的要求,这时就需要用户使用 Hint 来指定生成某种执行计划。

Hint 从语法上看是一种特殊的 SQL 注释,所不同的是在注释的左标记后("/*"符号)增加了一个"+"。 既然是注释,如果服务器端无法识别 SQL 语句中的 Hint,优化器会选择忽略用户 Hint 而使用默认的计划生成逻辑结构。另外,Hint 只影响优化器生成计划的逻辑结构,而不影响 SQL 语句的语义。
{ DELETE | INSERT | SELECT | UPDATE | REPLACE } /*+ [hint_text][,hint_text]... */

注意:
1.  如果使用 MySQL 的 C 客户端执行带 Hint 的 SQL 语句,需要使用 -c 选项登录,否则 MySQL 客户端会将 Hint 作为注释从用户 SQL 语句中去除,导致系统无法收到用户 Hint。
2.  在 SQL 语句中,表名存在别名即 table_name [AS] alias ,必须写表别名,才能使 INDEX 生效。

Hint 相关参数名称、语义和语法如下表所示。http://www.cndba.cn/dave/article/131445http://www.cndba.cn/dave/article/131445http://www.cndba.cn/dave/article/131445http://www.cndba.cn/dave/article/131445http://www.cndba.cn/dave/article/131445http://www.cndba.cn/dave/article/131445http://www.cndba.cn/dave/article/131445http://www.cndba.cn/dave/article/131445http://www.cndba.cn/dave/article/131445http://www.cndba.cn/dave/article/131445

名称 语法 语义
NO_REWRITE NO_REWRITE 禁止 SQL 改写。
READ_CONSISTENCY READ_CONSISTENCY (WEAK[STRONGFROZEN]) 读一致性设置(弱/强)。
INDEX_HINT /*+ INDEX(table_name index_name) */ 设置表索引。
QUERY_TIMEOUT QUERY_TIMEOUT(INTNUM) 设置超时时间。
LOG_LEVEL LOG_LEVEL([']log_level[']) 设置日志级别,当设置模块级别语句时候,以第一个单引号(')作为开始,第二个单引号(')作为结束;例如'DEBUG'。
LEADING LEADING([qb_name] TBL_NAME_LIST) 设置联接顺序。
ORDERED ORDERED 设置按照 SQL 中的顺序进行联接。
FULL FULL([qb_name] TBL_NAME) 设置表访问路径为主表等价于 INDEX(TBL_NAME PRIMARY)
USE_PLAN_CACHE USE_PLAN_CACHE(NONE[DEFAULT]) 设置是否使用计划缓存:
  • NONE:表示不使用计划缓存。
  • DEFAULT:表示按照服务器本身的设置来决定是否使用计划缓存。
USE_MERGE USE_MERGE([qb_name] TBL_NAME_LIST) 设置指定表在作为右表时使用 Merge Join。
USE_HASH USE_HASH([qb_name] TBL_NAME_LIST) 设置指定表在作为右表时使用 Hash Join。
NO_USE_HASH NO_USE_HASH([qb_name] TBL_NAME_LIST) 设置指定表在作为右表时不使用 Hash Join。
USE_NL USE_NL([qb_name] TBL_NAME_LIST) 设置指定表在作为右表时使用 Nested Loop Join。
USE_BNL USE_BNL([qb_name] TBL_NAME_LIST) 设置指定表在作为右表时使用 Block Nested Loop Join
USE_HASH_AGGREGATION USE_HASH_AGGREGATION([qb_name]) 设置聚合算法为 Hash。例如 Hash Group By 或者 Hash Distinct。
NO_USE_HASH_AGGREGATION NO_USE_HASH_AGGREGATION([qb_name]) 设置 Aggregate 方法不使用 Hash Aggregate,使用 Merge Group By 或者 Merge Distinct。
USE_LATE_MATERIALIZATION USE_LATE_MATERIALIZATION 设置使用晚期物化。
NO_USE_LATE_MATERIALIZATION NO_USE_LATE_MATERIALIZATION 设置不使用晚期物化。
TRACE_LOG TRACE_LOG 设置收集 Trace 记录用于 SHOW TRACE 展示。
QB_NAME QB_NAME( NAME ) 设置 Query Block 的名称。
PARALLEL PARALLEL(INTNUM) 设置分布式执行并行度。
TOPK TOPK(PRECISION MINIMUM_ROWS) 设置模糊查询的精度和最小行数。 其中 PRECSION 为整型,取值范围[0,100],表示模糊查询的行数百分比;MINIMUM_ROWS 为最小返回行数。


用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
dave

dave

关注

人的一生应该是这样度过的:当他回首往事的时候,他不会因为虚度年华而悔恨,也不会因为碌碌无为而羞耻;这样,在临死的时候,他就能够说:“我的整个生命和全部精力,都已经献给世界上最壮丽的事业....."

  • 2237
    原创
  • 2
    翻译
  • 535
    转载
  • 185
    评论
  • 访问:6531564次
  • 积分:4229
  • 等级:核心会员
  • 排名:第1名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ