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. 执行计划佐证
图片里的执行计划:
- 先全表扫描
t2; - 再根据
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右表时,选用归并连接 |
