为什么没有 where 子句时 Oracle join 不使用索引

问题描述 投票:0回答:2

我是 Oracle 的长期用户/开发人员。 Oracle 版本是 19c.

场景是,我有一个读取表 A 的查询得到一个连接到表 B 的唯一标识符。

select A.unique_id, B.*
from A
inner join B on B.unique_id = A.unique_id
where A.unique_id = 123;

查询运行很快,解释计划使用 B.unique_id 的索引显示它。

但是如果我想查看所有行;

select A.unique_id, B.*
from A
inner join B on B.unique_id = A.unique_id;

它永远运行,解释计划说它正在进行全表扫描。

我不清楚发生了什么。这似乎是我一定错过的一个基本问题。

谁能解释一下;

  1. 为什么会这样。
  2. 我可以做些什么来强制它使用适当的索引。我尝试了索引提示但没有成功。

编辑:

A 表目前有大约 700 万行。表 B 有大约 2800 万行

用where子句解释计划;

<TABLE class="TreeTableWidget" border=0 cellpadding=0 cellspacing=0 width=100% bgcolor=#efefef><tr><td> 

 <!-- ..........................data begin...........................  -->

    <TABLE class=TreeTableWidget border=0 cellspacing=0 cellpadding=1 align=center width=100%"  bgcolor=#ffffff> 
    <tr class="TableCell">

       <td valign=top bgcolor=#bbbbbb>&nbsp;<font color=#444477>OPERATION</font>&nbsp;</td>

       <td valign=top bgcolor=#aaaaaa>&nbsp;<font color=#444477>OBJECT_NAME</font>&nbsp;</td>

       <td valign=top bgcolor=#bbbbbb>&nbsp;<font color=#444477>OPTIONS</font>&nbsp;</td>

       <td valign=top bgcolor=#aaaaaa>&nbsp;<font color=#444477>CARDINALITY</font>&nbsp;</td>

       <td valign=top bgcolor=#bbbbbb>&nbsp;<font color=#444477>COST</font>&nbsp;</td>

    </tr>

   <tr>
      <td width=45% valign=top bgcolor=#ffffff ><font size=-1><table width=100% border=0 cellspacing=0 cellpadding=0><tr><td width=1%><table CELLSPACING=0 cellpadding=0><tr><td><IMG SRC="images/minus.gif" wWIDTH=16 hHEIGHT=16 BORDER=0><IMG SRC="images/gray.png" wWIDTH=16 hHEIGHT=16 BORDER=0></td><tr></table></td>  <td width=99%>&nbsp;SELECT STATEMENT&nbsp;</td></tr></table></font></td>
      <td width=11% valign=top bgcolor=#dfdfdf >&nbsp;&nbsp&nbsp;</td>
      <td width=11% valign=top bgcolor=#dfd5d1 >&nbsp;&nbsp&nbsp;</td>
      <td width=11% valign=top bgcolor=#dfdfdf >&nbsp;1&nbsp;</font></td>
      <td width=11% valign=top bgcolor=#dfd5d1 >&nbsp;3&nbsp;</font></td>
   </tr>
   <tr>
      <td width=45% valign=top bgcolor=#ffffff ><font size=-1><table width=100% border=0 cellspacing=0 cellpadding=0><tr><td width=1%><table CELLSPACING=0 cellpadding=0><tr><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td><IMG SRC="images/minus.gif" wWIDTH=16 hHEIGHT=16 BORDER=0><IMG SRC="images/join.png" wWIDTH=16 hHEIGHT=16 BORDER=0></td><tr></table></td>  <td width=99%>&nbsp;NESTED LOOPS&nbsp;</td></tr></table></font></td>
      <td width=11% valign=top bgcolor=#ffffdf >&nbsp;&nbsp&nbsp;</td>
      <td width=11% valign=top bgcolor=#ffffd2 >&nbsp;&nbsp&nbsp;</td>
      <td width=11% valign=top bgcolor=#ffffdf >&nbsp;1&nbsp;</font></td>
      <td width=11% valign=top bgcolor=#ffffd2 >&nbsp;3&nbsp;</font></td>
   </tr>
   <tr>
      <td width=45% valign=top bgcolor=#ffffff ><table width=100% border=0 cellspacing=0 cellpadding=0><tr><td width=1%><table CELLSPACING=0 cellpadding=0><tr><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td><IMG SRC="images/minus.gif" wWIDTH=16 hHEIGHT=16 BORDER=0><IMG SRC="images/index.png" wWIDTH=16 hHEIGHT=16 BORDER=0></td><tr></table></td>  <td width=99%>&nbsp;INDEX&nbsp;</td></tr></table></font></td>
      <td width=11% valign=top bgcolor=#dfdfdf ><font size=-1>&nbsp;IND_ABSGEOCODE&nbsp;</font></td>
      <td width=11% valign=top bgcolor=#dfd5d1 ><font size=-1>&nbsp;UNIQUE SCAN&nbsp;</font></td>
      <td width=11% valign=top bgcolor=#dfdfdf >&nbsp;1&nbsp;</font></td>
      <td width=11% valign=top bgcolor=#dfd5d1 >&nbsp;2&nbsp;</font></td>
   </tr>
   <tr>
      <td width=45% valign=top bgcolor=#ffffff ><table width=100% border=0 cellspacing=0 cellpadding=0><tr><td width=1%><table CELLSPACING=0 cellpadding=0><tr><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td><IMG SRC="images/minus.gif" wWIDTH=16 hHEIGHT=16 BORDER=0><IMG SRC="images/index.png" wWIDTH=16 hHEIGHT=16 BORDER=0></td><tr></table></td>  <td width=99%>&nbsp;INDEX&nbsp;</td></tr></table></font></td>
      <td width=11% valign=top bgcolor=#ffffdf ><font size=-1>&nbsp;ABSHIST_RECORD_SEQ&nbsp;</font></td>
      <td width=11% valign=top bgcolor=#ffffd2 ><font size=-1>&nbsp;UNIQUE SCAN&nbsp;</font></td>
      <td width=11% valign=top bgcolor=#ffffdf >&nbsp;1&nbsp;</font></td>
      <td width=11% valign=top bgcolor=#ffffd2 >&nbsp;1&nbsp;</font></td>
   </tr>
</table>

 <!-- ..........................data end...........................  -->

</td></tr></TABLE> 

没有where子句的解释计划;

<TABLE class="TreeTableWidget" border=0 cellpadding=0 cellspacing=0 width=100% bgcolor=#efefef><tr><td> 

 <!-- ..........................data begin...........................  -->

    <TABLE class=TreeTableWidget border=0 cellspacing=0 cellpadding=1 align=center width=100%"  bgcolor=#ffffff> 
    <tr class="TableCell">

       <td valign=top bgcolor=#bbbbbb>&nbsp;<font color=#444477>OPERATION</font>&nbsp;</td>

       <td valign=top bgcolor=#aaaaaa>&nbsp;<font color=#444477>OBJECT_NAME</font>&nbsp;</td>

       <td valign=top bgcolor=#bbbbbb>&nbsp;<font color=#444477>OPTIONS</font>&nbsp;</td>

       <td valign=top bgcolor=#aaaaaa>&nbsp;<font color=#444477>CARDINALITY</font>&nbsp;</td>

       <td valign=top bgcolor=#bbbbbb>&nbsp;<font color=#444477>COST</font>&nbsp;</td>

       <td valign=top bgcolor=#aaaaaa>&nbsp;<font color=#444477>OBJECT_NODE</font>&nbsp;</td>

       <td valign=top bgcolor=#bbbbbb>&nbsp;<font color=#444477>OTHER_TAG</font>&nbsp;</td>

    </tr>

   <tr>
      <td width=45% valign=top bgcolor=#ffffff ><font size=-2><table width=100% border=0 cellspacing=0 cellpadding=0><tr><td width=1%><table CELLSPACING=0 cellpadding=0><tr><td><IMG SRC="images/minus.gif" wWIDTH=16 hHEIGHT=16 BORDER=0><IMG SRC="images/gray.png" wWIDTH=16 hHEIGHT=16 BORDER=0></td><tr></table></td>  <td width=99%>&nbsp;SELECT STATEMENT&nbsp;</td></tr></table></font></td>
      <td width=7% valign=top bgcolor=#dfdfdf >&nbsp;&nbsp&nbsp;</td>
      <td width=7% valign=top bgcolor=#dfd5d1 >&nbsp;&nbsp&nbsp;</td>
      <td width=7% valign=top bgcolor=#dfdfdf ><font size=-1>&nbsp;6787518&nbsp;</font></td>
      <td width=7% valign=top bgcolor=#dfd5d1 ><font size=-1>&nbsp;21297&nbsp;</font></td>
      <td width=7% valign=top bgcolor=#dfdfdf >&nbsp;&nbsp&nbsp;</td>
      <td width=7% valign=top bgcolor=#dfd5d1 >&nbsp;&nbsp&nbsp;</td>
   </tr>
   <tr>
      <td width=45% valign=top bgcolor=#ffffff ><font size=-2><table width=100% border=0 cellspacing=0 cellpadding=0><tr><td width=1%><table CELLSPACING=0 cellpadding=0><tr><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td><IMG SRC="images/minus.gif" wWIDTH=16 hHEIGHT=16 BORDER=0><IMG SRC="images/gray.png" wWIDTH=16 hHEIGHT=16 BORDER=0></td><tr></table></td>  <td width=99%>&nbsp;PX COORDINATOR&nbsp;</td></tr></table></font></td>
      <td width=7% valign=top bgcolor=#ffffdf >&nbsp;&nbsp&nbsp;</td>
      <td width=7% valign=top bgcolor=#ffffd2 >&nbsp;&nbsp&nbsp;</td>
      <td width=7% valign=top bgcolor=#ffffdf >&nbsp;&nbsp&nbsp;</td>
      <td width=7% valign=top bgcolor=#ffffd2 >&nbsp;&nbsp&nbsp;</td>
      <td width=7% valign=top bgcolor=#ffffdf >&nbsp;&nbsp&nbsp;</td>
      <td width=7% valign=top bgcolor=#ffffd2 >&nbsp;&nbsp&nbsp;</td>
   </tr>
   <tr>
      <td width=45% valign=top bgcolor=#ffffff ><font size=-1><table width=100% border=0 cellspacing=0 cellpadding=0><tr><td width=1%><table CELLSPACING=0 cellpadding=0><tr><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td><IMG SRC="images/minus.gif" wWIDTH=16 hHEIGHT=16 BORDER=0><IMG SRC="images/gray.png" wWIDTH=16 hHEIGHT=16 BORDER=0></td><tr></table></td>  <td width=99%>&nbsp;PX SEND&nbsp;</td></tr></table></font></td>
      <td width=7% valign=top bgcolor=#dfdfdf ><font size=-2>&nbsp;SYS.:TQ10002&nbsp;</font></td>
      <td width=7% valign=top bgcolor=#dfd5d1 ><font size=-2>&nbsp;QC (RANDOM)&nbsp;</font></td>
      <td width=7% valign=top bgcolor=#dfdfdf ><font size=-1>&nbsp;6787518&nbsp;</font></td>
      <td width=7% valign=top bgcolor=#dfd5d1 ><font size=-1>&nbsp;21297&nbsp;</font></td>
      <td width=7% valign=top bgcolor=#dfdfdf ><font size=-1>&nbsp;:Q1002&nbsp;</font></td>
      <td width=7% valign=top bgcolor=#dfd5d1 ><font size=-1>&nbsp;P->S&nbsp;</font></td>
   </tr>
   <tr>
      <td width=45% valign=top bgcolor=#ffffff ><font size=-1><table width=100% border=0 cellspacing=0 cellpadding=0><tr><td width=1%><table CELLSPACING=0 cellpadding=0><tr><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td><IMG SRC="images/minus.gif" wWIDTH=16 hHEIGHT=16 BORDER=0><IMG SRC="images/join.png" wWIDTH=16 hHEIGHT=16 BORDER=0></td><tr></table></td>  <td width=99%>&nbsp;HASH JOIN&nbsp;</td></tr></table></font></td>
      <td width=7% valign=top bgcolor=#ffffdf >&nbsp;&nbsp&nbsp;</td>
      <td width=7% valign=top bgcolor=#ffffd2 ><font size=-1>&nbsp;BUFFERED&nbsp;</font></td>
      <td width=7% valign=top bgcolor=#ffffdf ><font size=-1>&nbsp;6787518&nbsp;</font></td>
      <td width=7% valign=top bgcolor=#ffffd2 ><font size=-1>&nbsp;21297&nbsp;</font></td>
      <td width=7% valign=top bgcolor=#ffffdf ><font size=-1>&nbsp;:Q1002&nbsp;</font></td>
      <td width=7% valign=top bgcolor=#ffffd2 ><font size=-1>&nbsp;PCWP&nbsp;</font></td>
   </tr>
   <tr>
      <td width=45% valign=top bgcolor=#ffffff ><font size=-2><table width=100% border=0 cellspacing=0 cellpadding=0><tr><td width=1%><table CELLSPACING=0 cellpadding=0><tr><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td><IMG SRC="images/minus.gif" wWIDTH=16 hHEIGHT=16 BORDER=0><IMG SRC="images/gray.png" wWIDTH=16 hHEIGHT=16 BORDER=0></td><tr></table></td>  <td width=99%>&nbsp;PX RECEIVE&nbsp;</td></tr></table></font></td>
      <td width=7% valign=top bgcolor=#dfdfdf >&nbsp;&nbsp&nbsp;</td>
      <td width=7% valign=top bgcolor=#dfd5d1 >&nbsp;&nbsp&nbsp;</td>
      <td width=7% valign=top bgcolor=#dfdfdf ><font size=-1>&nbsp;6930390&nbsp;</font></td>
      <td width=7% valign=top bgcolor=#dfd5d1 ><font size=-1>&nbsp;13149&nbsp;</font></td>
      <td width=7% valign=top bgcolor=#dfdfdf ><font size=-1>&nbsp;:Q1002&nbsp;</font></td>
      <td width=7% valign=top bgcolor=#dfd5d1 ><font size=-1>&nbsp;PCWP&nbsp;</font></td>
   </tr>
   <tr>
      <td width=45% valign=top bgcolor=#ffffff ><font size=-1><table width=100% border=0 cellspacing=0 cellpadding=0><tr><td width=1%><table CELLSPACING=0 cellpadding=0><tr><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td><IMG SRC="images/minus.gif" wWIDTH=16 hHEIGHT=16 BORDER=0><IMG SRC="images/gray.png" wWIDTH=16 hHEIGHT=16 BORDER=0></td><tr></table></td>  <td width=99%>&nbsp;PX SEND&nbsp;</td></tr></table></font></td>
      <td width=7% valign=top bgcolor=#ffffdf ><font size=-2>&nbsp;SYS.:TQ10000&nbsp;</font></td>
      <td width=7% valign=top bgcolor=#ffffd2 ><font size=-2>&nbsp;HYBRID HASH&nbsp;</font></td>
      <td width=7% valign=top bgcolor=#ffffdf ><font size=-1>&nbsp;6930390&nbsp;</font></td>
      <td width=7% valign=top bgcolor=#ffffd2 ><font size=-1>&nbsp;13149&nbsp;</font></td>
      <td width=7% valign=top bgcolor=#ffffdf ><font size=-1>&nbsp;:Q1000&nbsp;</font></td>
      <td width=7% valign=top bgcolor=#ffffd2 ><font size=-1>&nbsp;P->P&nbsp;</font></td>
   </tr>
   <tr>
      <td width=45% valign=top bgcolor=#ffffff ><font size=-2><table width=100% border=0 cellspacing=0 cellpadding=0><tr><td width=1%><table CELLSPACING=0 cellpadding=0><tr><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td><IMG SRC="images/minus.gif" wWIDTH=16 hHEIGHT=16 BORDER=0><IMG SRC="images/gray.png" wWIDTH=16 hHEIGHT=16 BORDER=0></td><tr></table></td>  <td width=99%>&nbsp;STATISTICS COLLECTOR&nbsp;</td></tr></table></font></td>
      <td width=7% valign=top bgcolor=#dfdfdf >&nbsp;&nbsp&nbsp;</td>
      <td width=7% valign=top bgcolor=#dfd5d1 >&nbsp;&nbsp&nbsp;</td>
      <td width=7% valign=top bgcolor=#dfdfdf >&nbsp;&nbsp&nbsp;</td>
      <td width=7% valign=top bgcolor=#dfd5d1 >&nbsp;&nbsp&nbsp;</td>
      <td width=7% valign=top bgcolor=#dfdfdf ><font size=-1>&nbsp;:Q1000&nbsp;</font></td>
      <td width=7% valign=top bgcolor=#dfd5d1 ><font size=-1>&nbsp;PCWC&nbsp;</font></td>
   </tr>
   <tr>
      <td width=45% valign=top bgcolor=#ffffff ><font size=-1><table width=100% border=0 cellspacing=0 cellpadding=0><tr><td width=1%><table CELLSPACING=0 cellpadding=0><tr><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td><IMG SRC="images/minus.gif" wWIDTH=16 hHEIGHT=16 BORDER=0><IMG SRC="images/gray.png" wWIDTH=16 hHEIGHT=16 BORDER=0></td><tr></table></td>  <td width=99%>&nbsp;PX BLOCK&nbsp;</td></tr></table></font></td>
      <td width=7% valign=top bgcolor=#ffffdf >&nbsp;&nbsp&nbsp;</td>
      <td width=7% valign=top bgcolor=#ffffd2 ><font size=-1>&nbsp;ITERATOR&nbsp;</font></td>
      <td width=7% valign=top bgcolor=#ffffdf ><font size=-1>&nbsp;6930390&nbsp;</font></td>
      <td width=7% valign=top bgcolor=#ffffd2 ><font size=-1>&nbsp;13149&nbsp;</font></td>
      <td width=7% valign=top bgcolor=#ffffdf ><font size=-1>&nbsp;:Q1000&nbsp;</font></td>
      <td width=7% valign=top bgcolor=#ffffd2 ><font size=-1>&nbsp;PCWC&nbsp;</font></td>
   </tr>
   <tr>
      <td width=45% valign=top bgcolor=#ffffff ><font size=-2><table width=100% border=0 cellspacing=0 cellpadding=0><tr><td width=1%><table CELLSPACING=0 cellpadding=0><tr><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td><IMG SRC="images/minus.gif" wWIDTH=16 hHEIGHT=16 BORDER=0><IMG SRC="images/table.png" wWIDTH=16 hHEIGHT=16 BORDER=0></td><tr></table></td>  <td width=99%>&nbsp;TABLE ACCESS&nbsp;</td></tr></table></font></td>
      <td width=7% valign=top bgcolor=#dfdfdf ><font size=-1>&nbsp;ABSHIST&nbsp;</font></td>
      <td width=7% valign=top bgcolor=#dfd5d1 ><font size=-1>&nbsp;FULL&nbsp;</font></td>
      <td width=7% valign=top bgcolor=#dfdfdf ><font size=-1>&nbsp;6930390&nbsp;</font></td>
      <td width=7% valign=top bgcolor=#dfd5d1 ><font size=-1>&nbsp;13149&nbsp;</font></td>
      <td width=7% valign=top bgcolor=#dfdfdf ><font size=-1>&nbsp;:Q1000&nbsp;</font></td>
      <td width=7% valign=top bgcolor=#dfd5d1 ><font size=-1>&nbsp;PCWP&nbsp;</font></td>
   </tr>
   <tr>
      <td width=45% valign=top bgcolor=#ffffff ><font size=-2><table width=100% border=0 cellspacing=0 cellpadding=0><tr><td width=1%><table CELLSPACING=0 cellpadding=0><tr><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td><IMG SRC="images/minus.gif" wWIDTH=16 hHEIGHT=16 BORDER=0><IMG SRC="images/gray.png" wWIDTH=16 hHEIGHT=16 BORDER=0></td><tr></table></td>  <td width=99%>&nbsp;PX RECEIVE&nbsp;</td></tr></table></font></td>
      <td width=7% valign=top bgcolor=#ffffdf >&nbsp;&nbsp&nbsp;</td>
      <td width=7% valign=top bgcolor=#ffffd2 >&nbsp;&nbsp&nbsp;</td>
      <td width=7% valign=top bgcolor=#ffffdf ><font size=-1>&nbsp;6787518&nbsp;</font></td>
      <td width=7% valign=top bgcolor=#ffffd2 ><font size=-1>&nbsp;8147&nbsp;</font></td>
      <td width=7% valign=top bgcolor=#ffffdf ><font size=-1>&nbsp;:Q1002&nbsp;</font></td>
      <td width=7% valign=top bgcolor=#ffffd2 ><font size=-1>&nbsp;PCWP&nbsp;</font></td>
   </tr>
   <tr>
      <td width=45% valign=top bgcolor=#ffffff ><font size=-1><table width=100% border=0 cellspacing=0 cellpadding=0><tr><td width=1%><table CELLSPACING=0 cellpadding=0><tr><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td><IMG SRC="images/minus.gif" wWIDTH=16 hHEIGHT=16 BORDER=0><IMG SRC="images/gray.png" wWIDTH=16 hHEIGHT=16 BORDER=0></td><tr></table></td>  <td width=99%>&nbsp;PX SEND&nbsp;</td></tr></table></font></td>
      <td width=7% valign=top bgcolor=#dfdfdf ><font size=-2>&nbsp;SYS.:TQ10001&nbsp;</font></td>
      <td width=7% valign=top bgcolor=#dfd5d1 ><font size=-2>&nbsp;HYBRID HASH&nbsp;</font></td>
      <td width=7% valign=top bgcolor=#dfdfdf ><font size=-1>&nbsp;6787518&nbsp;</font></td>
      <td width=7% valign=top bgcolor=#dfd5d1 ><font size=-1>&nbsp;8147&nbsp;</font></td>
      <td width=7% valign=top bgcolor=#dfdfdf ><font size=-1>&nbsp;:Q1001&nbsp;</font></td>
      <td width=7% valign=top bgcolor=#dfd5d1 ><font size=-2>&nbsp;PARALLEL_FROM_SERIAL&nbsp;</font></td>
   </tr>
   <tr>
      <td width=45% valign=top bgcolor=#ffffff ><font size=-2><table width=100% border=0 cellspacing=0 cellpadding=0><tr><td width=1%><table CELLSPACING=0 cellpadding=0><tr><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td><IMG SRC="images/minus.gif" wWIDTH=16 hHEIGHT=16 BORDER=0><IMG SRC="images/gray.png" wWIDTH=16 hHEIGHT=16 BORDER=0></td><tr></table></td>  <td width=99%>&nbsp;PX SELECTOR&nbsp;</td></tr></table></font></td>
      <td width=7% valign=top bgcolor=#ffffdf >&nbsp;&nbsp&nbsp;</td>
      <td width=7% valign=top bgcolor=#ffffd2 >&nbsp;&nbsp&nbsp;</td>
      <td width=7% valign=top bgcolor=#ffffdf >&nbsp;&nbsp&nbsp;</td>
      <td width=7% valign=top bgcolor=#ffffd2 >&nbsp;&nbsp&nbsp;</td>
      <td width=7% valign=top bgcolor=#ffffdf ><font size=-1>&nbsp;:Q1001&nbsp;</font></td>
      <td width=7% valign=top bgcolor=#ffffd2 ><font size=-2>&nbsp;SINGLE_COMBINED_WITH_CHILD&nbsp;</font></td>
   </tr>
   <tr>
      <td width=45% valign=top bgcolor=#ffffff ><font size=-1><table width=100% border=0 cellspacing=0 cellpadding=0><tr><td width=1%><table CELLSPACING=0 cellpadding=0><tr><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td><IMG SRC="images/minus.gif" wWIDTH=16 hHEIGHT=16 BORDER=0><IMG SRC="images/index.png" wWIDTH=16 hHEIGHT=16 BORDER=0></td><tr></table></td>  <td width=99%>&nbsp;INDEX&nbsp;</td></tr></table></font></td>
      <td width=7% valign=top bgcolor=#dfdfdf ><font size=-2>&nbsp;IND_ABSGEOCODE&nbsp;</font></td>
      <td width=7% valign=top bgcolor=#dfd5d1 ><font size=-2>&nbsp;RANGE SCAN&nbsp;</font></td>
      <td width=7% valign=top bgcolor=#dfdfdf ><font size=-1>&nbsp;6787518&nbsp;</font></td>
      <td width=7% valign=top bgcolor=#dfd5d1 ><font size=-1>&nbsp;8147&nbsp;</font></td>
      <td width=7% valign=top bgcolor=#dfdfdf ><font size=-1>&nbsp;:Q1001&nbsp;</font></td>
      <td width=7% valign=top bgcolor=#dfd5d1 ><font size=-2>&nbsp;SINGLE_COMBINED_WITH_PARENT&nbsp;</font></td>
   </tr>
</table>

 <!-- ..........................data end...........................  -->

</td></tr></TABLE> 

sql oracle oracle19c
2个回答
0
投票

Oracle 会选择它认为最好的方案。有时会使用索引,有时会使用全表扫描。所以这是很正常的行为,尤其是在删除谓词时。鉴于您当前的查询没有 123 谓词,除非 table_A 与 table_B 相比非常小,否则使用全扫描的散列连接实际上是最好的方法。你确实 not 想尝试强制它使用索引。

至于为什么它“永远占用”,您应该得到一个执行计划并查询

v$active_session_history
您的SQLID以查看发生了什么以及它在哪里花费时间,或者向您的DBA寻求帮助。

没有看到任何东西,我最初的猜测是:

  1. 表格很大,您正在连续阅读它们,
  2. 表很大,它必须使用大量临时空间来进行连接,
  3. 由于您要求将所有行返回给您的客户端,也许它们正在被获取的过程中,这可能需要很长时间才能通过您的网络以小批量的方式发送给您的客户端,但这不是数据库的错。
  4. 也许“拿永远”是相对的,你想知道为什么过了几分钟还没有看到第一行。那是因为散列连接就是这样工作的。它必须先从一个输入完全构建哈希表,然后再开始用另一个输入探测它,然后您才会开始看到行。重要的是整个 SQL 的总体运行时间,而不是第一行的响应时间。

您当然可以通过使用并行性更快地获得散列连接:

select /*+ parallel(8) */ A.unique_id, B.*
from A
inner join B on B.unique_id = A.unique_id;

也许还与 DBA 合作分配更多 PGA 以减少临时空间工作区,但这对整体运行时间没有多大好处,因为将所有这些结果取回给您的客户端需要更长的时间,这就是受网络延迟和客户端提取调用大小的限制。


0
投票

Oracle 不使用索引的另一个非常常见的原因是数据库统计信息丢失或过时。

检查上次分析表和索引的时间:

SELECT table_name, num_rows, last_analyzed FROM user_tables WHERE table_name = 'my_table';

SELECT index_name, num_rows, last_analyzed FROM user_indexes WHERE index_name = 'my_index';

如果您正在使用的数据库对象的统计信息是陈旧的,您应该强制 Oracle 生成新的统计信息,例如:

EXEC DBMS_STATS.gather_table_stats('SCOTT', 'EMPLOYEES', estimate_percent => 15, cascade => TRUE);

基于成本的优化器 (CBO) 和数据库统计 在进入官方 Oracle 文档 之前提供了一个很好的介绍。

© www.soinside.com 2019 - 2024. All rights reserved.