带有交叉连接的 Oracle 查询 - 性能问题

如何解决带有交叉连接的 Oracle 查询 - 性能问题

我希望任何人都可以帮助我看看我是否可以改进这个查询:

环境:

  • Oracle 数据库 12cR2
  • Linux 红帽 7
  • 具有 8 个 CPU 和 32GB RAM 的虚拟机
  • 使用 AUTO SAMPLE 和 FOR ALL COLUMNS SIZE AUTO 方法计算最新的统计数据
  • 优化器参数是 12.2 的默认参数

原始查询属于第三方软件。正如预期的那样,它正在使用 cross join 来创建 HASH JOINS。原始查询和计划统计信息为:

$ sqlplus /@USERWALLET @original.sql

SQL*Plus: Release 12.2.0.1.0 Production on Tue Jun 29 13:19:47 2021

Copyright (c) 1982,2016,Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> var processingDate number;
SQL> exec :processingDate := 20210621;

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.00
SQL> -- without index
SQL> select distinct 1 as col_0_0_ from ALFATS.FloatingRateRollover floatingra0_
  2  cross join ALFATS.FloatingRateDetail floatingra1_
  3  cross join ALFATS.FloatingRateInterestCalendar floatingra2_
  4  cross join ALFATS.Schedule schedule3_
  5  where floatingra0_.agreementNumber=floatingra1_.agreementNumber and
  6  floatingra0_.scheduleNumber=floatingra1_.scheduleNumber and
  7  floatingra0_.id=floatingra2_.floatingRateRolloverId and
  8  floatingra0_.agreementNumber=schedule3_.agreementNumber and
  9  floatingra0_.scheduleNumber=schedule3_.scheduleNumber and
 10  floatingra0_.terminationNumber=schedule3_.terminationNumber and
 11  floatingra0_.adjustmentProcessedIndicator='N' and
 12  floatingra2_.processingDate<=:processingDate  and
 13  floatingra1_.variableRateType='U' and
 14  floatingra0_.terminationNumber=0 and
 15  schedule3_.scheduleStatus<>'PRE' and
 16  not (exists (select 1 from ALFATS.TransactionFailure transactio4_
 17  where floatingra0_.agreementNumber=transactio4_.agreementNumber and
 18  floatingra0_.scheduleNumber=transactio4_.scheduleNumber and
 19  floatingra0_.terminationNumber=transactio4_.terminationNumber))
 20  ;

  COL_0_0_
----------
         1

1 row selected.

Elapsed: 00:00:23.70

Execution Plan
----------------------------------------------------------
Plan hash value: 3077170061

-----------------------------------------------------------------------------------------------------------------
| Id  | Operation                | Name                         | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT         |                              |   106K|    15M|       |   236K  (1)| 00:00:10 |
|   1 |  SORT UNIQUE NOSORT      |                              |   106K|    15M|       |   236K  (1)| 00:00:10 |
|*  2 |   HASH JOIN RIGHT ANTI   |                              |   106K|    15M|       |   232K  (1)| 00:00:10 |
|*  3 |    INDEX FAST FULL SCAN  | TRANSACTIONFAILURE_NK        |    39 |  1170 |       |     3   (0)| 00:00:01 |
|*  4 |    HASH JOIN SEMI        |                              |   106K|    12M|    10M|   232K  (1)| 00:00:10 |
|*  5 |     HASH JOIN RIGHT SEMI |                              |   110K|  9207K|  4608K|   230K  (1)| 00:00:10 |
|*  6 |      INDEX FAST FULL SCAN| FLOATINGRATEDETAIL_1         |   109K|  3319K|       |   724   (1)| 00:00:01 |
|*  7 |      HASH JOIN           |                              |   284K|    14M|  6944K|   228K  (1)| 00:00:09 |
|*  8 |       TABLE ACCESS FULL  | FLOATINGRATEINTERESTCALENDAR |   284K|  3608K|       | 20338   (1)| 00:00:01 |
|*  9 |       TABLE ACCESS FULL  | FLOATINGRATEROLLOVER         |    29M|  1153M|       |   133K  (1)| 00:00:06 |
|* 10 |     INDEX FAST FULL SCAN | SCHEDULE_L1                  |   274K|     9M|       |   852   (1)| 00:00:01 |
-----------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("FLOATINGRA0_"."AGREEMENTNUMBER"="TRANSACTIO4_"."AGREEMENTNUMBER" AND
              "FLOATINGRA0_"."SCHEDULENUMBER"="TRANSACTIO4_"."SCHEDULENUMBER" AND
              "FLOATINGRA0_"."TERMINATIONNUMBER"="TRANSACTIO4_"."TERMINATIONNUMBER")
   3 - filter("TRANSACTIO4_"."TERMINATIONNUMBER"=0)
   4 - access("FLOATINGRA0_"."AGREEMENTNUMBER"="SCHEDULE3_"."AGREEMENTNUMBER" AND
              "FLOATINGRA0_"."SCHEDULENUMBER"="SCHEDULE3_"."SCHEDULENUMBER" AND
              "FLOATINGRA0_"."TERMINATIONNUMBER"="SCHEDULE3_"."TERMINATIONNUMBER")
   5 - access("FLOATINGRA0_"."AGREEMENTNUMBER"="FLOATINGRA1_"."AGREEMENTNUMBER" AND
              "FLOATINGRA0_"."SCHEDULENUMBER"="FLOATINGRA1_"."SCHEDULENUMBER")
   6 - filter("FLOATINGRA1_"."VARIABLERATETYPE"=U'U')
   7 - access("FLOATINGRA0_"."ID"="FLOATINGRA2_"."FLOATINGRATEROLLOVERID")
   8 - filter("FLOATINGRA2_"."PROCESSINGDATE"<=TO_NUMBER(:PROCESSINGDATE))
   9 - filter("FLOATINGRA0_"."ADJUSTMENTPROCESSEDINDICATOR"=U'N' AND
              "FLOATINGRA0_"."TERMINATIONNUMBER"=0)
  10 - filter("SCHEDULE3_"."TERMINATIONNUMBER"=0 AND "SCHEDULE3_"."SCHEDULESTATUS"<>U'PRE')


Statistics
----------------------------------------------------------
          4  recursive calls
          0  db block gets
     569374  consistent gets
     488274  physical reads
        484  redo size
        542  bytes sent via SQL*Net to client
        607  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed

查看计划后,我尝试通过创建以下两个索引来避免那些 TABLE FULL SCAN:

SQL> CREATE INDEX alfats.FloatingRateRollover_PRF1 
     ON alfats.FloatingRateRollover (adjustmentProcessedIndicator,agreementNumber,scheduleNumber,terminationNumber,id) 
     INVISIBLE 
     COMPUTE STATISTICS;

Index created.

Elapsed: 00:01:58.14

SQL> CREATE INDEX alfats.FloatingRateInterestCalendar_PRF2 
     ON alfats.FloatingRateInterestCalendar (floatingRateRolloverId,processingDate) 
     INVISIBLE 
     COMPUTE STATISTICS;

Index created.

Elapsed: 00:00:06.60

此后,查询改进,它在所有涉及的表中通过 INDEX FAST FULL SCAN 访问,但仍然需要时间

$ sqlplus /@USERWALLET @original_with_indexes.sql

SQL*Plus: Release 12.2.0.1.0 Production on Tue Jun 29 13:24:27 2021

Copyright (c) 1982,Oracle.  All rights reserved.
    
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> var processingDate number;
SQL> exec :processingDate := 20210621;

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.00
SQL> alter session set optimizer_use_invisible_indexes=true;

Session altered.

Elapsed: 00:00:00.00
SQL> select distinct 1 as col_0_0_ from ALFATS.FloatingRateRollover floatingra0_
  2  cross join ALFATS.FloatingRateDetail floatingra1_
  3  cross join ALFATS.FloatingRateInterestCalendar floatingra2_
  4  cross join ALFATS.Schedule schedule3_
  5  where floatingra0_.agreementNumber=floatingra1_.agreementNumber and
  6  floatingra0_.scheduleNumber=floatingra1_.scheduleNumber and
  7  floatingra0_.id=floatingra2_.floatingRateRolloverId and
  8  floatingra0_.agreementNumber=schedule3_.agreementNumber and
  9  floatingra0_.scheduleNumber=schedule3_.scheduleNumber and
 10  floatingra0_.terminationNumber=schedule3_.terminationNumber and
 11  floatingra0_.adjustmentProcessedIndicator='N' and
 12  floatingra2_.processingDate<=:processingDate  and
 13  floatingra1_.variableRateType='U' and
 14  floatingra0_.terminationNumber=0 and
 15  schedule3_.scheduleStatus<>'PRE' and
 16  not (exists (select 1 from ALFATS.TransactionFailure transactio4_
 17  where floatingra0_.agreementNumber=transactio4_.agreementNumber and
 18  floatingra0_.scheduleNumber=transactio4_.scheduleNumber and
 19  floatingra0_.terminationNumber=transactio4_.terminationNumber))
 20  ;

  COL_0_0_
----------
         1

1 row selected.

Elapsed: 00:00:10.95

Execution Plan
----------------------------------------------------------
Plan hash value: 1805021994

-----------------------------------------------------------------------------------------------------------------------
| Id  | Operation                 | Name                              | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT          |                                   |   106K|    15M|       |   149K  (1)| 00:00:06 |
|   1 |  SORT UNIQUE NOSORT       |                                   |   106K|    15M|       |   149K  (1)| 00:00:06 |
|*  2 |   HASH JOIN RIGHT ANTI    |                                   |   106K|    15M|       |   145K  (1)| 00:00:06 |
|*  3 |    INDEX FAST FULL SCAN   | TRANSACTIONFAILURE_NK             |    39 |  1170 |       |     3   (0)| 00:00:01 |
|*  4 |    HASH JOIN SEMI         |                                   |   106K|    12M|    10M|   145K  (1)| 00:00:06 |
|*  5 |     HASH JOIN RIGHT SEMI  |                                   |   110K|  9207K|  4608K|   143K  (1)| 00:00:06 |
|*  6 |      INDEX FAST FULL SCAN | FLOATINGRATEDETAIL_1              |   109K|  3319K|       |   724   (1)| 00:00:01 |
|*  7 |      HASH JOIN            |                                   |   284K|    14M|  6944K|   141K  (1)| 00:00:06 |
|*  8 |       INDEX FAST FULL SCAN| FLOATINGRATEINTERESTCALENDAR_PRF2 |   284K|  3608K|       |  5050   (2)| 00:00:01 |
|*  9 |       INDEX FAST FULL SCAN| FLOATINGRATEROLLOVER_PRF1         |    29M|  1153M|       | 62326   (1)| 00:00:03 |
|* 10 |     INDEX FAST FULL SCAN  | SCHEDULE_L1                       |   274K|     9M|       |   852   (1)| 00:00:01 |
-----------------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("FLOATINGRA0_"."AGREEMENTNUMBER"="TRANSACTIO4_"."AGREEMENTNUMBER" AND
              "FLOATINGRA0_"."SCHEDULENUMBER"="TRANSACTIO4_"."SCHEDULENUMBER" AND
              "FLOATINGRA0_"."TERMINATIONNUMBER"="TRANSACTIO4_"."TERMINATIONNUMBER")
   3 - filter("TRANSACTIO4_"."TERMINATIONNUMBER"=0)
   4 - access("FLOATINGRA0_"."AGREEMENTNUMBER"="SCHEDULE3_"."AGREEMENTNUMBER" AND
              "FLOATINGRA0_"."SCHEDULENUMBER"="SCHEDULE3_"."SCHEDULENUMBER" AND
              "FLOATINGRA0_"."TERMINATIONNUMBER"="SCHEDULE3_"."TERMINATIONNUMBER")
   5 - access("FLOATINGRA0_"."AGREEMENTNUMBER"="FLOATINGRA1_"."AGREEMENTNUMBER" AND
              "FLOATINGRA0_"."SCHEDULENUMBER"="FLOATINGRA1_"."SCHEDULENUMBER")
   6 - filter("FLOATINGRA1_"."VARIABLERATETYPE"=U'U')
   7 - access("FLOATINGRA0_"."ID"="FLOATINGRA2_"."FLOATINGRATEROLLOVERID")
   8 - filter("FLOATINGRA2_"."PROCESSINGDATE"<=TO_NUMBER(:PROCESSINGDATE))
   9 - filter("FLOATINGRA0_"."ADJUSTMENTPROCESSEDINDICATOR"=U'N' AND "FLOATINGRA0_"."TERMINATIONNUMBER"=0)
  10 - filter("SCHEDULE3_"."TERMINATIONNUMBER"=0 AND "SCHEDULE3_"."SCHEDULESTATUS"<>U'PRE')


Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
     257732  consistent gets
          0  physical reads
       6224  redo size
        542  bytes sent via SQL*Net to client
        607  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed

我的最后一次尝试是尝试通过使用 JOIN/ON 语法将其中一些 cross joins 转换为 inner joins 来重写查询。我有更好的时间,但计划看起来一样。我在服务器中使用不同级别的负载运行了多次测试,但我仍然在下面的查询中获得了更好的时间,即使计划看起来相同。

SQL> select distinct 1 as col_0_0_ from
  2  ALFATS.FloatingRateRollover t0
  3  inner join ALFATS.FloatingRateDetail t1
  4  on ( t0.agreementNumber=t1.agreementNumber
  5       and
  6       t0.scheduleNumber=t1.scheduleNumber
  7       and
  8       t0.adjustmentProcessedIndicator='N'
  9       and
 10       t0.terminationNumber=0
 11       and
 12       t1.variableRateType='U'
 13   )
 14  inner join ALFATS.Schedule t3
 15  on (
 16  t0.agreementNumber=t3.agreementNumber
 17  and
 18  t0.scheduleNumber=t3.scheduleNumber
 19  and
 20  t0.terminationNumber=t3.terminationNumber
 21  and
 22  t3.scheduleStatus<>'PRE'
 23  )
 24  inner join ALFATS.FloatingRateInterestCalendar t2
 25  on (
 26  t0.id = t2.floatingRateRolloverId
 27  and
 28  t2.processingDate<=:processingDate
 29  ) where
 30  not (exists (select 1 from ALFATS.TransactionFailure t4
 31               where t0.agreementNumber=t4.agreementNumber and
 32               t0.scheduleNumber=t4.scheduleNumber and
 33               t0.terminationNumber=t4.terminationNumber)
 34  )
 35  ;

1 row selected.

Elapsed: 00:00:07.93

Execution Plan
----------------------------------------------------------
Plan hash value: 1805021994

-----------------------------------------------------------------------------------------------------------------------
| Id  | Operation                 | Name                              | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT          |                                   |   106K|    15M|       |   149K  (1)| 00:00:06 |
|   1 |  SORT UNIQUE NOSORT       |                                   |   106K|    15M|       |   149K  (1)| 00:00:06 |
|*  2 |   HASH JOIN RIGHT ANTI    |                                   |   106K|    15M|       |   145K  (1)| 00:00:06 |
|*  3 |    INDEX FAST FULL SCAN   | TRANSACTIONFAILURE_NK             |    39 |  1170 |       |     3   (0)| 00:00:01 |
|*  4 |    HASH JOIN SEMI         |                                   |   106K|    12M|    10M|   145K  (1)| 00:00:06 |
|*  5 |     HASH JOIN RIGHT SEMI  |                                   |   110K|  9207K|  4608K|   143K  (1)| 00:00:06 |
|*  6 |      INDEX FAST FULL SCAN | FLOATINGRATEDETAIL_1              |   109K|  3319K|       |   724   (1)| 00:00:01 |
|*  7 |      HASH JOIN            |                                   |   284K|    14M|  6944K|   141K  (1)| 00:00:06 |
|*  8 |       INDEX FAST FULL SCAN| FLOATINGRATEINTERESTCALENDAR_PRF2 |   284K|  3608K|       |  5050   (2)| 00:00:01 |
|*  9 |       INDEX FAST FULL SCAN| FLOATINGRATEROLLOVER_PRF1         |    29M|  1153M|       | 62326   (1)| 00:00:03 |
|* 10 |     INDEX FAST FULL SCAN  | SCHEDULE_L1                       |   274K|     9M|       |   852   (1)| 00:00:01 |
-----------------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("T0"."AGREEMENTNUMBER"="T4"."AGREEMENTNUMBER" AND "T0"."SCHEDULENUMBER"="T4"."SCHEDULENUMBER"
              AND "T0"."TERMINATIONNUMBER"="T4"."TERMINATIONNUMBER")
   3 - filter("T4"."TERMINATIONNUMBER"=0)
   4 - access("T0"."AGREEMENTNUMBER"="T3"."AGREEMENTNUMBER" AND "T0"."SCHEDULENUMBER"="T3"."SCHEDULENUMBER"
              AND "T0"."TERMINATIONNUMBER"="T3"."TERMINATIONNUMBER")
   5 - access("T0"."AGREEMENTNUMBER"="T1"."AGREEMENTNUMBER" AND "T0"."SCHEDULENUMBER"="T1"."SCHEDULENUMBER")
   6 - filter("T1"."VARIABLERATETYPE"=U'U')
   7 - access("T0"."ID"="T2"."FLOATINGRATEROLLOVERID")
   8 - filter("T2"."PROCESSINGDATE"<=TO_NUMBER(:PROCESSINGDATE))
   9 - filter("T0"."ADJUSTMENTPROCESSEDINDICATOR"=U'N' AND "T0"."TERMINATIONNUMBER"=0)
  10 - filter("T3"."TERMINATIONNUMBER"=0 AND "T3"."SCHEDULESTATUS"<>U'PRE')


Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
     257573  consistent gets
          0  physical reads
       1288  redo size
        542  bytes sent via SQL*Net to client
        608  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed

更新

根据要求,这里是原始查询的 SQL MONITOR 的详细信息

Global Stats
=================================================
| Elapsed |   Cpu   |  Other   | Fetch | Buffer |
| Time(s) | Time(s) | Waits(s) | Calls |  Gets  |
=================================================
|      11 |      11 |     0.05 |     2 |   266K |
=================================================

SQL Plan Monitoring Details (Plan Hash Value=768763834)
=======================================================================================================================================================================
| Id |          Operation          |               Name                |  Rows   | Cost  |   Time    | Start  | Execs |   Rows   |  Mem  | Activity | Activity Detail |
|    |                             |                                   | (Estim) |       | Active(s) | Active |       | (Actual) | (Max) |   (%)    |   (# samples)   |
=======================================================================================================================================================================
|  0 | SELECT STATEMENT            |                                   |         |       |         6 |     +6 |     1 |        1 |     . |          |                 |
|  1 |   SORT UNIQUE NOSORT        |                                   |    869K |  192K |         6 |     +6 |     1 |        1 |     . |          |                 |
|  2 |    HASH JOIN RIGHT ANTI     |                                   |    869K |  163K |         6 |     +6 |     1 |       61 |   1MB |          |                 |
|  3 |     INDEX FAST FULL SCAN    | TRANSACTIONFAILURE_NK             |      42 |     4 |         1 |     +6 |     1 |       42 |     . |          |                 |
|  4 |     HASH JOIN RIGHT SEMI    |                                   |    869K |  163K |         6 |     +6 |     1 |       70 |  22MB |          |                 |
|  5 |      INDEX FAST FULL SCAN   | SCHEDULE_L1                       |    276K |   856 |         1 |     +6 |     1 |     279K |     . |          |                 |
|  6 |      HASH JOIN RIGHT SEMI   |                                   |    901K |  157K |         6 |     +6 |     1 |       70 |  10MB |          |                 |
|  7 |       INDEX FAST FULL SCAN  | FLOATINGRATEDETAIL_1              |    110K |   728 |         1 |     +6 |     1 |     110K |     . |          |                 |
|  8 |       HASH JOIN             |                                   |      2M |  149K |        11 |     +1 |     1 |       70 | 108MB |          |                 |
|  9 |        INDEX FAST FULL SCAN | FLOATINGRATEINTERESTCALENDAR_PRF2 |      2M |  5039 |         1 |     +6 |     1 |       2M |     . |          |                 |
| 10 |        INDEX FAST FULL SCAN | FLOATINGRATEROLLOVER_PRF1         |     30M | 66438 |         9 |     +3 |     1 |      30M |     . |          |                 |
=======================================================================================================================================================================

并监视我使用 JOIN / ON 语法更改的查询报告

Global Stats
=================================================
| Elapsed |   Cpu   |  Other   | Fetch | Buffer |
| Time(s) | Time(s) | Waits(s) | Calls |  Gets  |
=================================================
|      9  |      9  |     0.01 |     2 |   266K |
=================================================

SQL Plan Monitoring Details (Plan Hash Value=768763834)
=======================================================================================================================================================================
| Id |          Operation          |               Name                |  Rows   | Cost  |   Time    | Start  | Execs |   Rows   |  Mem  | Activity | Activity Detail |
|    |                             |                                   | (Estim) |       | Active(s) | Active |       | (Actual) | (Max) |   (%)    |   (# samples)   |
=======================================================================================================================================================================
|  0 | SELECT STATEMENT            |                                   |         |       |         5 |     +6 |     1 |        1 |     . |          |                 |
|  1 |   SORT UNIQUE NOSORT        |                                   |    869K |  192K |         5 |     +6 |     1 |        1 |     . |          |                 |
|  2 |    HASH JOIN RIGHT ANTI     |                                   |    869K |  163K |         5 |     +6 |     1 |       61 |   1MB |          |                 |
|  3 |     INDEX FAST FULL SCAN    | TRANSACTIONFAILURE_NK             |      42 |     4 |         7 |     +0 |     1 |       42 |     . |          |                 |
|  4 |     HASH JOIN RIGHT SEMI    |                                   |    869K |  163K |         5 |     +6 |     1 |       70 |  22MB |          |                 |
|  5 |      INDEX FAST FULL SCAN   | SCHEDULE_L1                       |    276K |   856 |         1 |     +6 |     1 |     279K |     . |          |                 |
|  6 |      HASH JOIN RIGHT SEMI   |                                   |    901K |  157K |         5 |     +6 |     1 |       70 |  10MB |          |                 |
|  7 |       INDEX FAST FULL SCAN  | FLOATINGRATEDETAIL_1              |    110K |   728 |         1 |     +6 |     1 |     110K |     . |          |                 |
|  8 |       HASH JOIN             |                                   |      2M |  149K |         9 |     +2 |     1 |       70 | 108MB |          |                 |
|  9 |        INDEX FAST FULL SCAN | FLOATINGRATEINTERESTCALENDAR_PRF2 |      2M |  5039 |         6 |     +1 |     1 |       2M |     . |          |                 |
| 10 |        INDEX FAST FULL SCAN | FLOATINGRATEROLLOVER_PRF1         |     30M | 66438 |         8 |     +3 |     1 |      30M |     . |          |                 |
=======================================================================================================================================================================

正如您在监视器中看到的那样,两个查询都使用相同的 PLAN HASH VALUE,因此 CBO 对它们使用相同的计划来解释它们确实是相同的查询。尽管如此,我总是使用 JOIN / ON 语法进行查询,但老实说我不明白为什么。

我的问题是是否有一种更简单的方法来改进这个查询,同时考虑到数量。当计划和成本(包括访问路径和谓词信息)相同时,理解为什么使用 JOIN / ON 语法的查询在性能上表现更好会很好。

提前致谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res