ITPub博客

首页 > 数据库 > Oracle > [20250307]关于use_hash提示遇到的问题.txt

[20250307]关于use_hash提示遇到的问题.txt

原创 Oracle 作者:lfree 时间:2025-03-13 21:59:04 0 删除 编辑

[20250307]关于use_hash提示遇到的问题.txt

--//前一段时间遇到的问题,当时觉得奇怪,做一个简单例子说明问题:

1.环境:
SCOTT@book01p> @ver2
==============================
PORT_STRING                   : x86_64/Linux 2.4.xx
VERSION                       : 21.0.0.0.0
BANNER                        : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
BANNER_FULL                   : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0
BANNER_LEGACY                 : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
CON_ID                        : 0
PL/SQL procedure successfully completed.

2.测试:
SCOTT@book01p> select /*+ use_hash(dept emp) */ dname,ename,loc from dept,emp where dept.deptno = emp.deptno;

SCOTT@book01p> @ dpc '' 'outline' ''
Plan hash value: 615168685
-------------------------------------------------------------------------------------------------------
| Id  | Operation          | Name | E-Rows |E-Bytes| Cost (%CPU)| E-Time   |  OMem |  1Mem | Used-Mem |
-------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |      |        |       |     6 (100)|          |       |       |          |
|*  1 |  HASH JOIN         |      |     12 |   348 |     6   (0)| 00:00:01 |  1399K|  1399K| 1018K (0)|
|   2 |   TABLE ACCESS FULL| DEPT |      4 |    80 |     3   (0)| 00:00:01 |       |       |          |
|   3 |   TABLE ACCESS FULL| EMP  |     12 |   108 |     3   (0)| 00:00:01 |       |       |          |
-------------------------------------------------------------------------------------------------------
....
Outline Data
-------------

  /*+
      BEGIN_OUTLINE_DATA
      IGNORE_OPTIM_EMBEDDED_HINTS
      OPTIMIZER_FEATURES_ENABLE('21.1.0')
      DB_VERSION('21.1.0')
      ALL_ROWS
      OUTLINE_LEAF(@"SEL$1")
      FULL(@"SEL$1" "DEPT"@"SEL$1")
      FULL(@"SEL$1" "EMP"@"SEL$1")
      LEADING(@"SEL$1" "DEPT"@"SEL$1" "EMP"@"SEL$1")
      USE_HASH(@"SEL$1" "EMP"@"SEL$1")
      END_OUTLINE_DATA
  */

Hint Report (identified by operation id / Query Block Name / Object Alias):
Total hints for statement: 2 (U - Unused (1))
---------------------------------------------------------------------------
   2 -  SEL$1 / "DEPT"@"SEL$1"
         U -  use_hash(dept emp)

   3 -  SEL$1 / "EMP"@"SEL$1"
           -  use_hash(dept emp)

--//开始看到提示部分感觉很奇怪,不理解,实际上真实的提示应该是USE_HASH(@"SEL$1" "EMP"@"SEL$1"),里面写入被驱动表就可以了。
--//对于这类情况要优化最好加入leading提示。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-3075782/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    4006
  • 访问量
    7969664