关于hint指定关联,是哪个表关联哪个表?T2 JOIN T1

1 个赞

结论:T2 作为驱动表(左表),T1 作为被驱动表(右表),执行 T2 关联 T1(T2→T1)

一、核心Hint拆解

1. LEADING(t2 t1)

LEADING 内书写顺序就是Join执行顺序
列表第一个 t2驱动表(外表),先扫描遍历;
第二个 t1被驱动表(内表/右表),依托驱动表的每行数据去匹配查找。

2. USE_NL(t1)

OceanBase 中 USE_NL(表名) 的语义:指定该表作为嵌套循环的右表(被驱动表)时使用 Nested Loop Join,再次印证 t1 是右表,t2 是左驱动表。

3. 执行计划佐证

图片里的执行计划:

  1. 先全表扫描 t2
  2. 再根据t2的数据逐行查表t1
    算子为 NESTED-LOOP JOIN,执行逻辑:拿t2的数据去关联匹配t1

二、各Hint简要说明

Hint 作用
ORDERED 严格依照SQL中FROM子句书写的表顺序作为Join顺序
LEADING(a,b,c) 强制指定Join顺序:a→b→c,a为第一层驱动表
USE_NL(t) t作为Join右表时,选用嵌套循环连接
USE_HASH(t) t作为Join右表时,选用哈希连接
USE_MERGE(t) t作为Join右表时,选用归并连接