在nest loop中,如何通过测试手段确认驱动表是上方的表还是下方的表。
通过hint中的leading测试:
SQL> EXPLAIN SELECT /*+leading(a)*/ * FROM area a, branches b WHERE a.area_no = b.area_no;
PLAN_DESCRIPTION
----------------------------------------------------------------
SQL hash value: 2466524393
Optimizer: ADOPT_C
+----+--------------------------------+----------------------+------------+----------+-------------+--------------------------------+
| Id | Operation type | Name | Owner | Rows | Cost(%CPU) | Partition info |
+----+--------------------------------+----------------------+------------+----------+-------------+--------------------------------+
| 0 | SELECT STATEMENT | | | | | |
|* 1 | HASH JOIN INNER | | | 10| 11( 0)| |
| 2 | TABLE ACCESS FULL | AREA | SALES | 5| 1( 0)| |
| 3 | TABLE ACCESS FULL | BRANCHES | SALES | 12| 1( 0)| |
+----+--------------------------------+----------------------+------------+----------+-------------+--------------------------------+
Operation Information (identified by operation id):
---------------------------------------------------
1 - Predicate : access("A"."AREA_NO" = "B"."AREA_NO")
16 rows fetched.
SQL> EXPLAIN SELECT /*+leading(b)*/ * FROM area a, branches b WHERE a.area_no = b.area_no;
PLAN_DESCRIPTION
----------------------------------------------------------------
SQL hash value: 809577705
Optimizer: ADOPT_C
+----+--------------------------------+----------------------+------------+----------+-------------+--------------------------------+
| Id | Operation type | Name | Owner | Rows | Cost(%CPU) | Partition info |
+----+--------------------------------+----------------------+------------+----------+-------------+--------------------------------+
| 0 | SELECT STATEMENT | | | | | |
| 1 | NESTED INDEX LOOPS INNER | | | 10| 1( 0)| |
| 2 | TABLE ACCESS FULL | BRANCHES | SALES | 12| 1( 0)| |
| 3 | TABLE ACCESS BY INDEX ROWID | AREA | SALES | 1| 1( 0)| |
|* 4 | INDEX UNIQUE SCAN | SYS_C_27 | SALES | 1| 1( 0)| |
+----+--------------------------------+----------------------+------------+----------+-------------+--------------------------------+
Operation Information (identified by operation id):
---------------------------------------------------
4 - Predicate : access("A"."AREA_NO" = "B"."AREA_NO")
17 rows fetched.
当使用leading(a)时,a表在上方;使用leading(b)时,b表在上方。可以确认在YashanDB的执行计划中,两表连接时,驱动表显示在上方。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




