【积分活动】DBA 实战营 第五期 —— 通过 Hint 控制计划生成的形态(5.26 更新,快来参与,福利多多)

Hint 是一种 SQL 语句注释,用于将指令传递给 OceanBase 数据库优化器。通过 Hint 可以使优化器生成指定的执行计划。

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

—— 摘抄自官网在线体验《常用 Hint 使用》

1. 起手就是三个问题

先通过三个小问题,快速检测一下大家对 Hint 功能的了解程度!

数据库中 Join 操作很常见,例如:

SELECT * FROM t1, t2 WHERE t1.c1 = t2.c1;

问题一:如果我想对 t1 join t2 对应计划中的 join 计算方式进行干预。那么在干预之前,原本 join 方式和顺序的计划空间有几种?

这个问题比较简单,直接公布答案:六种。

  • t1 nest loop join t2
  • t1 hash join t2
  • t1 merge join t2
  • t2 nest loop join t1
  • t2 hash join t1
  • t2 merge join t1

问题二:如果给上面这条 SQL 加了一个 hint:/*+ USE_NL(t1) */,则计划空间会变为几种?分别是什么?

SELECT /*+ USE_NL(t1) */ * 
FROM t1, t2 WHERE t1.c1 = t2.c1;

答案:计划空间从上题答案中的 6 种变成了 4 种,是不是猜错了?分别是哪几种先卖个关子,嘿嘿~

问题三:如果我想生成 t2 nest loop join t1 这样的计划(用 NLJ,并且 t2 是左表),应该怎么写这个 Hint?

至于第二个问题为什么是 4 种?具体是哪四种?以及第三个问题的 Hint 怎么写?欢迎大家来学习这期课程,寻求答案。

本期课程会为大家介绍 OceanBase 中最常用的几种 Hint,在学习课程,寻求上述问题答案的过程中,大家就开始能够自己控制 SQL 计划的生产形态了!

15 个赞

《DBA 实战营》在线课程 传送门

《常用 Hint 使用》在线体验 传送门

活动福利

  • 参与每个章节的在线体验,即可获得积分奖励和抽奖机会(积分福利于 2025 年 6 月 30 日 0 时关闭,积分将于活动结束后 10 个工作日内发放)。

    • 仅需在课程页面中各小节后的 “在线体验” 部分,上传一张和课程内容对应的在线实验页面上包含 select now(), "xxx" as "论坛用户名"; 信息的截图,即会被判定为完成了课后练习。

    • 完成每个课后练习,均可获取 10 积分。第 1、20、66 到在线课堂中提交截图并通过审核的同学还将获得相应的奖品。本期课程的三个奖品分别是:

      • @兹拉坦 收藏了三年之久的蚂蚁集团 x 阿里巴巴绝版笔记本 * 1(正面蚂蚁 logo,背面阿里 logo,阿里巴巴和蚂蚁集团拆分之后,就再没有出现过这种笔记本了)

:low_brightness:第五期:常用 Hint 使用 获奖名单公布
恭喜@AntTech_PY27RK获得蚂蚁集团 x 阿里巴巴绝版笔记本1本
恭喜@AntTech_d777 获得《OceanBase 源码解析》电子书1本
恭喜@salamander 获得社区200积分

  • 通过第一季全部十个章节的课后练习,即可参加最终的 DBA 实战营结课考试,并获取结课证书。通过结课考试的前 100 位用户,可以获取由 OceanBase 培训团队为大家提供的 OBCA 考试券 / OBCP 折扣券福利:

25 个赞

沙发,第一,冲压

25 个赞

第二!

24 个赞

:call_me_hand: :call_me_hand: :call_me_hand:

24 个赞

:+1: :+1: :+1:

23 个赞

:+1: :+1: :+1:

22 个赞

新的一期开始了,支持

22 个赞

学习学习

22 个赞

:+1::+1::+1:

21 个赞

点赞

18 个赞

一期不落

15 个赞

福利多多

17 个赞

:+1: :+1: :+1:

16 个赞

:+1: :+1:紧跟步伐,新的一期练起来

17 个赞

已练习

16 个赞

:grin: :grin: :grin: :grin:

13 个赞

一起加油

13 个赞

值得学习

12 个赞

有没有hint更深层代码级别的介绍

12 个赞