暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

YashanDB 如何确认执行计划中的驱动表

原创 Skye 2025-04-09
179

在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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论