远程数据库的表超过20个索引的影响详细解析
<p>昨天同事参加了一个研讨会,有提到一个案例。一个通过dblink查询远端数据库,原来查询很快,但是远端数据库增加了一个索引之后,查询一下子变慢了。</p>
<p>
经过分析,发现那个通过dblink的查询语句,查询远端数据库的时候,是走索引的,但是远端数据库添加索引之后,如果索引的个数超过20个,就会忽略第一个建立的索引,如果查询语句恰好用到了第一个建立的索引,被忽略之后,只能走Full Table Scan了。</p>
<p>
听了这个案例,我查了一下,在oracle官方文档中,关于Managing a Distributed Database有一段话:</p>
<p>
<strong>Several performance restrictions relate to access of remote objects:</strong></p>
<p>
<span><strong>Remote views do not have statistical data.<br>
Queries on partitioned tables may not be optimized.<br>
No more than 20 indexes are considered for a remote table.<br>
No more than 20 columns are used for a composite index.</strong></span></p>
<p>
说到,如果远程数据库使用超过20个索引,这些索引将不被考虑。这段话,在oracle 9i起的文档中就已经存在,一直到12.2还有。</p>
<p>
那么,超过20个索引,是新的索引被忽略了?还是老索引被忽略了?如何让被忽略的索引让oracle意识到?我们来测试一下。<br>
(本文基于12.1.0.2的远程库和12.2.0.1的本地库进行测试,如果对测试过程没兴趣的,可以直接拉到文末看“综上”部分)</p>
<p>
<span><span><strong>(一)初始化测试表:</strong></span></span></p>
<div class="jb51code">
<div>
<div class="syntaxhighlightersql" id="highlighter_347419">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
<div class="line number8 index7 alt1">
8</div>
<div class="line number9 index8 alt2">
9</div>
<div class="line number10 index9 alt1">
10</div>
<div class="line number11 index10 alt2">
11</div>
<div class="line number12 index11 alt1">
12</div>
<div class="line number13 index12 alt2">
13</div>
<div class="line number14 index13 alt1">
14</div>
<div class="line number15 index14 alt2">
15</div>
<div class="line number16 index15 alt1">
16</div>
<div class="line number17 index16 alt2">
17</div>
<div class="line number18 index17 alt1">
18</div>
<div class="line number19 index18 alt2">
19</div>
<div class="line number20 index19 alt1">
20</div>
<div class="line number21 index20 alt2">
21</div>
<div class="line number22 index21 alt1">
22</div>
<div class="line number23 index22 alt2">
23</div>
<div class="line number24 index23 alt1">
24</div>
<div class="line number25 index24 alt2">
25</div>
<div class="line number26 index25 alt1">
26</div>
<div class="line number27 index26 alt2">
27</div>
<div class="line number28 index27 alt1">
28</div>
<div class="line number29 index28 alt2">
29</div>
<div class="line number30 index29 alt1">
30</div>
<div class="line number31 index30 alt2">
31</div>
<div class="line number32 index31 alt1">
32</div>
<div class="line number33 index32 alt2">
33</div>
<div class="line number34 index33 alt1">
34</div>
<div class="line number35 index34 alt2">
35</div>
<div class="line number36 index35 alt1">
36</div>
<div class="line number37 index36 alt2">
37</div>
<div class="line number38 index37 alt1">
38</div>
<div class="line number39 index38 alt2">
39</div>
<div class="line number40 index39 alt1">
40</div>
<div class="line number41 index40 alt2">
41</div>
<div class="line number42 index41 alt1">
42</div>
<div class="line number43 index42 alt2">
43</div>
<div class="line number44 index43 alt1">
44</div>
<div class="line number45 index44 alt2">
45</div>
<div class="line number46 index45 alt1">
46</div>
<div class="line number47 index46 alt2">
47</div>
<div class="line number48 index47 alt1">
48</div>
<div class="line number49 index48 alt2">
49</div>
<div class="line number50 index49 alt1">
50</div>
<div class="line number51 index50 alt2">
51</div>
<div class="line number52 index51 alt1">
52</div>
<div class="line number53 index52 alt2">
53</div>
<div class="line number54 index53 alt1">
54</div>
<div class="line number55 index54 alt2">
55</div>
<div class="line number56 index55 alt1">
56</div>
<div class="line number57 index56 alt2">
57</div>
<div class="line number58 index57 alt1">
58</div>
<div class="line number59 index58 alt2">
59</div>
<div class="line number60 index59 alt1">
60</div>
<div class="line number61 index60 alt2">
61</div>
<div class="line number62 index61 alt1">
62</div>
<div class="line number63 index62 alt2">
63</div>
<div class="line number64 index63 alt1">
64</div>
<div class="line number65 index64 alt2">
65</div>
<div class="line number66 index65 alt1">
66</div>
<div class="line number67 index66 alt2">
67</div>
<div class="line number68 index67 alt1">
68</div>
<div class="line number69 index68 alt2">
69</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="sql comments">--创建远程表:</code>
</div>
<div class="line number2 index1 alt1">
<code class="sql keyword">DROP</code> <code class="sql keyword">TABLE</code> <code class="sql plain">t_remote;</code>
</div>
<div class="line number3 index2 alt2">
<code class="sql spaces"> </code><code class="sql keyword">CREATE</code> <code class="sql keyword">TABLE</code> <code class="sql plain">t_remote (</code>
</div>
<div class="line number4 index3 alt1">
<code class="sql plain">col01 NUMBER,</code>
</div>
<div class="line number5 index4 alt2">
<code class="sql plain">col02 NUMBER,</code>
</div>
<div class="line number6 index5 alt1">
<code class="sql plain">col03 VARCHAR2(50),</code>
</div>
<div class="line number7 index6 alt2">
<code class="sql plain">col04 NUMBER,</code>
</div>
<div class="line number8 index7 alt1">
<code class="sql plain">col05 NUMBER,</code>
</div>
<div class="line number9 index8 alt2">
<code class="sql plain">col06 VARCHAR2(50),</code>
</div>
<div class="line number10 index9 alt1">
<code class="sql plain">col07 NUMBER,</code>
</div>
<div class="line number11 index10 alt2">
<code class="sql plain">col08 NUMBER,</code>
</div>
<div class="line number12 index11 alt1">
<code class="sql plain">col09 VARCHAR2(50),</code>
</div>
<div class="line number13 index12 alt2">
<code class="sql plain">col10 NUMBER,</code>
</div>
<div class="line number14 index13 alt1">
<code class="sql plain">col11 NUMBER,</code>
</div>
<div class="line number15 index14 alt2">
<code class="sql plain">col12 VARCHAR2(50),</code>
</div>
<div class="line number16 index15 alt1">
<code class="sql plain">col13 NUMBER,</code>
</div>
<div class="line number17 index16 alt2">
<code class="sql plain">col14 NUMBER,</code>
</div>
<div class="line number18 index17 alt1">
<code class="sql plain">col15 VARCHAR2(50),</code>
</div>
<div class="line number19 index18 alt2">
<code class="sql plain">col16 NUMBER,</code>
</div>
<div class="line number20 index19 alt1">
<code class="sql plain">col17 NUMBER,</code>
</div>
<div class="line number21 index20 alt2">
<code class="sql plain">col18 VARCHAR2(50),</code>
</div>
<div class="line number22 index21 alt1">
<code class="sql plain">col19 NUMBER,</code>
</div>
<div class="line number23 index22 alt2">
<code class="sql plain">col20 NUMBER,</code>
</div>
<div class="line number24 index23 alt1">
<code class="sql plain">col21 VARCHAR2(50),</code>
</div>
<div class="line number25 index24 alt2">
<code class="sql plain">col22 NUMBER,</code>
</div>
<div class="line number26 index25 alt1">
<code class="sql plain">col23 NUMBER,</code>
</div>
<div class="line number27 index26 alt2">
<code class="sql plain">col24 VARCHAR2(50),</code>
</div>
<div class="line number28 index27 alt1">
<code class="sql plain">col25 NUMBER,</code>
</div>
<div class="line number29 index28 alt2">
<code class="sql plain">col26 NUMBER,</code>
</div>
<div class="line number30 index29 alt1">
<code class="sql plain">col27 VARCHAR2(50)</code>
</div>
<div class="line number31 index30 alt2">
<code class="sql plain">);</code>
</div>
<div class="line number32 index31 alt1">
<code class="sql keyword">alter</code> <code class="sql keyword">table</code> <code class="sql plain">t_remote </code><code class="sql keyword">modify</code> <code class="sql plain">(col01 </code><code class="sql color1">not</code> <code class="sql color1">null</code><code class="sql plain">);</code>
</div>
<div class="line number33 index32 alt2">
<code class="sql keyword">INSERT</code> <code class="sql keyword">INTO</code> <code class="sql plain">t_remote</code>
</div>
<div class="line number34 index33 alt1">
<code class="sql keyword">SELECT</code>
</div>
<div class="line number35 index34 alt2">
<code class="sql plain">rownum, rownum, rpad(</code><code class="sql string">'*'</code><code class="sql plain">,50,</code><code class="sql string">'*'</code><code class="sql plain">),</code>
</div>
<div class="line number36 index35 alt1">
<code class="sql plain">rownum, rownum, rpad(</code><code class="sql string">'*'</code><code class="sql plain">,50,</code><code class="sql string">'*'</code><code class="sql plain">),</code>
</div>
<div class="line number37 index36 alt2">
<code class="sql plain">rownum, rownum, rpad(</code><code class="sql string">'*'</code><code class="sql plain">,50,</code><code class="sql string">'*'</code><code class="sql plain">),</code>
</div>
<div class="line number38 index37 alt1">
<code class="sql plain">rownum, rownum, rpad(</code><code class="sql string">'*'</code><code class="sql plain">,50,</code><code class="sql string">'*'</code><code class="sql plain">),</code>
</div>
<div class="line number39 index38 alt2">
<code class="sql plain">rownum, rownum, rpad(</code><code class="sql string">'*'</code><code class="sql plain">,50,</code><code class="sql string">'*'</code><code class="sql plain">),</code>
</div>
<div class="line number40 index39 alt1">
<code class="sql plain">rownum, rownum, rpad(</code><code class="sql string">'*'</code><code class="sql plain">,50,</code><code class="sql string">'*'</code><code class="sql plain">),</code>
</div>
<div class="line number41 index40 alt2">
<code class="sql plain">rownum, rownum, rpad(</code><code class="sql string">'*'</code><code class="sql plain">,50,</code><code class="sql string">'*'</code><code class="sql plain">),</code>
</div>
<div class="line number42 index41 alt1">
<code class="sql plain">rownum, rownum, rpad(</code><code class="sql string">'*'</code><code class="sql plain">,50,</code><code class="sql string">'*'</code><code class="sql plain">),</code>
</div>
<div class="line number43 index42 alt2">
<code class="sql plain">rownum, rownum, rpad(</code><code class="sql string">'*'</code><code class="sql plain">,50,</code><code class="sql string">'*'</code><code class="sql plain">)</code>
</div>
<div class="line number44 index43 alt1">
<code class="sql keyword">FROM</code> <code class="sql plain">dual</code>
</div>
<div class="line number45 index44 alt2">
<code class="sql keyword">CONNECT</code> <code class="sql keyword">BY</code> <code class="sql keyword">level</code> <code class="sql plain"><= 10000;</code>
</div>
<div class="line number46 index45 alt1">
<code class="sql keyword">commit</code><code class="sql plain">; </code>
</div>
<div class="line number47 index46 alt2">
<code class="sql keyword">create</code> <code class="sql keyword">unique</code> <code class="sql keyword">index</code> <code class="sql plain">t_remote_i01_pk </code><code class="sql keyword">on</code> <code class="sql plain">t_remote (col01);</code>
</div>
<div class="line number48 index47 alt1">
<code class="sql keyword">alter</code> <code class="sql keyword">table</code> <code class="sql plain">t_remote </code><code class="sql keyword">add</code> <code class="sql plain">(</code><code class="sql keyword">constraint</code> <code class="sql plain">t_remote_i01_pk </code><code class="sql keyword">primary</code> <code class="sql keyword">key</code> <code class="sql plain">(col01) using </code><code class="sql keyword">index</code> <code class="sql plain">t_remote_i01_pk);</code>
</div>
<div class="line number49 index48 alt2">
<code class="sql keyword">create</code> <code class="sql keyword">index</code> <code class="sql plain">t_remote_i02 </code><code class="sql keyword">on</code> <code class="sql plain">t_remote (col02);</code>
</div>
<div class="line number50 index49 alt1">
<code class="sql keyword">create</code> <code class="sql keyword">index</code> <code class="sql plain">t_remote_i03 </code><code class="sql keyword">on</code> <code class="sql plain">t_remote (col03);</code>
</div>
<div class="line number51 index50 alt2">
<code class="sql keyword">create</code> <code class="sql keyword">index</code> <code class="sql plain">t_remote_i04 </code><code class="sql keyword">on</code> <code class="sql plain">t_remote (col04);</code>
</div>
<div class="line number52 index51 alt1">
<code class="sql keyword">create</code> <code class="sql keyword">index</code> <code class="sql plain">t_remote_i05 </code><code class="sql keyword">on</code> <code class="sql plain">t_remote (col05);</code>
</div>
<div class="line number53 index52 alt2">
<code class="sql keyword">create</code> <code class="sql keyword">index</code> <code class="sql plain">t_remote_i06 </code><code class="sql keyword">on</code> <code class="sql plain">t_remote (col06);</code>
</div>
<div class="line number54 index53 alt1">
<code class="sql keyword">create</code> <code class="sql keyword">index</code> <code class="sql plain">t_remote_i07 </code><code class="sql keyword">on</code> <code class="sql plain">t_remote (col07);</code>
</div>
<div class="line number55 index54 alt2">
<code class="sql keyword">create</code> <code class="sql keyword">index</code> <code class="sql plain">t_remote_i08 </code><code class="sql keyword">on</code> <code class="sql plain">t_remote (col08);</code>
</div>
<div class="line number56 index55 alt1">
<code class="sql keyword">create</code> <code class="sql keyword">index</code> <code class="sql plain">t_remote_i09 </code><code class="sql keyword">on</code> <code class="sql plain">t_remote (col09);</code>
</div>
<div class="line number57 index56 alt2">
<code class="sql keyword">create</code> <code class="sql keyword">index</code> <code class="sql plain">t_remote_i10 </code><code class="sql keyword">on</code> <code class="sql plain">t_remote (col10);</code>
</div>
<div class="line number58 index57 alt1">
<code class="sql keyword">create</code> <code class="sql keyword">index</code> <code class="sql plain">t_remote_i11 </code><code class="sql keyword">on</code> <code class="sql plain">t_remote (col11);</code>
</div>
<div class="line number59 index58 alt2">
<code class="sql keyword">create</code> <code class="sql keyword">index</code> <code class="sql plain">t_remote_i12 </code><code class="sql keyword">on</code> <code class="sql plain">t_remote (col12);</code>
</div>
<div class="line number60 index59 alt1">
<code class="sql keyword">create</code> <code class="sql keyword">index</code> <code class="sql plain">t_remote_i13 </code><code class="sql keyword">on</code> <code class="sql plain">t_remote (col13);</code>
</div>
<div class="line number61 index60 alt2">
<code class="sql keyword">create</code> <code class="sql keyword">index</code> <code class="sql plain">t_remote_i14 </code><code class="sql keyword">on</code> <code class="sql plain">t_remote (col14);</code>
</div>
<div class="line number62 index61 alt1">
<code class="sql keyword">create</code> <code class="sql keyword">index</code> <code class="sql plain">t_remote_i15 </code><code class="sql keyword">on</code> <code class="sql plain">t_remote (col15);</code>
</div>
<div class="line number63 index62 alt2">
<code class="sql keyword">create</code> <code class="sql keyword">index</code> <code class="sql plain">t_remote_i16 </code><code class="sql keyword">on</code> <code class="sql plain">t_remote (col16);</code>
</div>
<div class="line number64 index63 alt1">
<code class="sql keyword">create</code> <code class="sql keyword">index</code> <code class="sql plain">t_remote_i17 </code><code class="sql keyword">on</code> <code class="sql plain">t_remote (col17);</code>
</div>
<div class="line number65 index64 alt2">
<code class="sql keyword">create</code> <code class="sql keyword">index</code> <code class="sql plain">t_remote_i18 </code><code class="sql keyword">on</code> <code class="sql plain">t_remote (col18);</code>
</div>
<div class="line number66 index65 alt1">
<code class="sql keyword">create</code> <code class="sql keyword">index</code> <code class="sql plain">t_remote_i19 </code><code class="sql keyword">on</code> <code class="sql plain">t_remote (col19);</code>
</div>
<div class="line number67 index66 alt2">
<code class="sql keyword">create</code> <code class="sql keyword">index</code> <code class="sql plain">t_remote_i20 </code><code class="sql keyword">on</code> <code class="sql plain">t_remote (col20);</code>
</div>
<div class="line number68 index67 alt1">
<code class="sql spaces"> </code>
</div>
<div class="line number69 index68 alt2">
<code class="sql keyword">exec</code> <code class="sql plain">dbms_stats.gather_table_stats(</code><code class="sql color2">user</code><code class="sql plain">,</code><code class="sql string">'T_REMOTE'</code><code class="sql plain">);</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<div class="jb51code">
<div>
<div class="syntaxhighlightersql" id="highlighter_405798">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
<div class="line number8 index7 alt1">
8</div>
<div class="line number9 index8 alt2">
9</div>
<div class="line number10 index9 alt1">
10</div>
<div class="line number11 index10 alt2">
11</div>
<div class="line number12 index11 alt1">
12</div>
<div class="line number13 index12 alt2">
13</div>
<div class="line number14 index13 alt1">
14</div>
<div class="line number15 index14 alt2">
15</div>
<div class="line number16 index15 alt1">
16</div>
<div class="line number17 index16 alt2">
17</div>
<div class="line number18 index17 alt1">
18</div>
<div class="line number19 index18 alt2">
19</div>
<div class="line number20 index19 alt1">
20</div>
<div class="line number21 index20 alt2">
21</div>
<div class="line number22 index21 alt1">
22</div>
<div class="line number23 index22 alt2">
23</div>
<div class="line number24 index23 alt1">
24</div>
<div class="line number25 index24 alt2">
25</div>
<div class="line number26 index25 alt1">
26</div>
<div class="line number27 index26 alt2">
27</div>
<div class="line number28 index27 alt1">
28</div>
<div class="line number29 index28 alt2">
29</div>
<div class="line number30 index29 alt1">
30</div>
<div class="line number31 index30 alt2">
31</div>
<div class="line number32 index31 alt1">
32</div>
<div class="line number33 index32 alt2">
33</div>
<div class="line number34 index33 alt1">
34</div>
<div class="line number35 index34 alt2">
35</div>
<div class="line number36 index35 alt1">
36</div>
<div class="line number37 index36 alt2">
37</div>
<div class="line number38 index37 alt1">
38</div>
<div class="line number39 index38 alt2">
39</div>
<div class="line number40 index39 alt1">
40</div>
<div class="line number41 index40 alt2">
41</div>
<div class="line number42 index41 alt1">
42</div>
<div class="line number43 index42 alt2">
43</div>
<div class="line number44 index43 alt1">
44</div>
<div class="line number45 index44 alt2">
45</div>
<div class="line number46 index45 alt1">
46</div>
<div class="line number47 index46 alt2">
47</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="sql comments">--创建本地表:</code>
</div>
<div class="line number2 index1 alt1">
<code class="sql keyword">drop</code> <code class="sql keyword">table</code> <code class="sql plain">t_local;</code>
</div>
<div class="line number3 index2 alt2">
<code class="sql spaces"> </code>
</div>
<div class="line number4 index3 alt1">
<code class="sql keyword">CREATE</code> <code class="sql keyword">TABLE</code> <code class="sql plain">t_local (</code>
</div>
<div class="line number5 index4 alt2">
<code class="sql plain">col01 NUMBER,</code>
</div>
<div class="line number6 index5 alt1">
<code class="sql plain">col02 NUMBER,</code>
</div>
<div class="line number7 index6 alt2">
<code class="sql plain">col03 VARCHAR2(50),</code>
</div>
<div class="line number8 index7 alt1">
<code class="sql plain">col04 NUMBER,</code>
</div>
<div class="line number9 index8 alt2">
<code class="sql plain">col05 NUMBER,</code>
</div>
<div class="line number10 index9 alt1">
<code class="sql plain">col06 VARCHAR2(50)</code>
</div>
<div class="line number11 index10 alt2">
<code class="sql plain">);</code>
</div>
<div class="line number12 index11 alt1">
<code class="sql spaces"> </code>
</div>
<div class="line number13 index12 alt2">
<code class="sql keyword">INSERT</code> <code class="sql keyword">INTO</code> <code class="sql plain">t_local</code>
</div>
<div class="line number14 index13 alt1">
<code class="sql keyword">SELECT</code>
</div>
<div class="line number15 index14 alt2">
<code class="sql plain">rownum, rownum, rpad(</code><code class="sql string">'*'</code><code class="sql plain">,50,</code><code class="sql string">'*'</code><code class="sql plain">),</code>
</div>
<div class="line number16 index15 alt1">
<code class="sql plain">rownum, rownum, rpad(</code><code class="sql string">'*'</code><code class="sql plain">,50,</code><code class="sql string">'*'</code><code class="sql plain">)</code>
</div>
<div class="line number17 index16 alt2">
<code class="sql keyword">FROM</code> <code class="sql plain">dual</code>
</div>
<div class="line number18 index17 alt1">
<code class="sql keyword">CONNECT</code> <code class="sql keyword">BY</code> <code class="sql keyword">level</code> <code class="sql plain"><= 50;</code>
</div>
<div class="line number19 index18 alt2">
<code class="sql spaces"> </code>
</div>
<div class="line number20 index19 alt1">
<code class="sql keyword">COMMIT</code><code class="sql plain">;</code>
</div>
<div class="line number21 index20 alt2">
<code class="sql spaces"> </code>
</div>
<div class="line number22 index21 alt1">
<code class="sql keyword">create</code> <code class="sql keyword">index</code> <code class="sql plain">t_local_i01 </code><code class="sql keyword">on</code> <code class="sql plain">t_local (col01);</code>
</div>
<div class="line number23 index22 alt2">
<code class="sql keyword">create</code> <code class="sql keyword">index</code> <code class="sql plain">t_local_i02 </code><code class="sql keyword">on</code> <code class="sql plain">t_local (col02);</code>
</div>
<div class="line number24 index23 alt1">
<code class="sql keyword">create</code> <code class="sql keyword">index</code> <code class="sql plain">t_local_i03 </code><code class="sql keyword">on</code> <code class="sql plain">t_local (col03);</code>
</div>
<div class="line number25 index24 alt2">
<code class="sql keyword">create</code> <code class="sql keyword">index</code> <code class="sql plain">t_local_i04 </code><code class="sql keyword">on</code> <code class="sql plain">t_local (col04);</code>
</div>
<div class="line number26 index25 alt1">
<code class="sql keyword">create</code> <code class="sql keyword">index</code> <code class="sql plain">t_local_i05 </code><code class="sql keyword">on</code> <code class="sql plain">t_local (col05);</code>
</div>
<div class="line number27 index26 alt2">
<code class="sql keyword">create</code> <code class="sql keyword">index</code> <code class="sql plain">t_local_i06 </code><code class="sql keyword">on</code> <code class="sql plain">t_local (col06);</code>
</div>
<div class="line number28 index27 alt1">
<code class="sql spaces"> </code>
</div>
<div class="line number29 index28 alt2">
<code class="sql keyword">exec</code> <code class="sql plain">dbms_stats.gather_table_stats(</code><code class="sql color2">user</code><code class="sql plain">,</code><code class="sql string">'t_local'</code><code class="sql plain">);</code>
</div>
<div class="line number30 index29 alt1">
<code class="sql spaces"> </code>
</div>
<div class="line number31 index30 alt2">
<code class="sql spaces"> </code>
</div>
<div class="line number32 index31 alt1">
<code class="sql keyword">create</code> <code class="sql keyword">database</code> <code class="sql plain">link dblink_remote </code><code class="sql keyword">CONNECT</code> <code class="sql keyword">TO</code> <code class="sql plain">test IDENTIFIED </code><code class="sql keyword">BY</code> <code class="sql plain">test USING </code><code class="sql string">'ora121'</code><code class="sql plain">;</code>
</div>
<div class="line number33 index32 alt2">
<code class="sql spaces"> </code>
</div>
<div class="line number34 index33 alt1">
<code class="sql spaces"> </code>
</div>
<div class="line number35 index34 alt2">
<code class="sql plain">SQL> </code><code class="sql keyword">select</code> <code class="sql plain">host_name </code><code class="sql keyword">from</code> <code class="sql plain">v$instance@dblink_remote;</code>
</div>
<div class="line number36 index35 alt1">
<code class="sql spaces"> </code>
</div>
<div class="line number37 index36 alt2">
<code class="sql plain">HOST_NAME</code>
</div>
<div class="line number38 index37 alt1">
<code class="sql comments">----------------------------------------------------------------</code>
</div>
<div class="line number39 index38 alt2">
<code class="sql plain">testdb2</code>
</div>
<div class="line number40 index39 alt1">
<code class="sql spaces"> </code>
</div>
<div class="line number41 index40 alt2">
<code class="sql plain">SQL> </code><code class="sql keyword">select</code> <code class="sql plain">host_name </code><code class="sql keyword">from</code> <code class="sql plain">v$instance;</code>
</div>
<div class="line number42 index41 alt1">
<code class="sql spaces"> </code>
</div>
<div class="line number43 index42 alt2">
<code class="sql plain">HOST_NAME</code>
</div>
<div class="line number44 index43 alt1">
<code class="sql comments">----------------------------------------------------------------</code>
</div>
<div class="line number45 index44 alt2">
<code class="sql plain">testdb10</code>
</div>
<div class="line number46 index45 alt1">
<code class="sql spaces"> </code>
</div>
<div class="line number47 index46 alt2">
<code class="sql plain">SQL></code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
可以看到,远程表有27个字段,目前还只是在前20个字段建立了索引,且第一个字段是主键。本地表,有6个字段,6个字段都建索引。</p>
<p>
<span><strong>(二)第一轮测试,远程表上有20个索引。</strong></span></p>
<p>
<span><strong>测试场景1:</strong></span></p>
<p>
在远程表20索引的情况下,本地表和远程表关联,用本地表的第一个字段关联远程表的第一个字段:</p>
<div class="jb51code">
<div>
<div class="syntaxhighlightersql" id="highlighter_470439">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
<div class="line number8 index7 alt1">
8</div>
<div class="line number9 index8 alt2">
9</div>
<div class="line number10 index9 alt1">
10</div>
<div class="line number11 index10 alt2">
11</div>
<div class="line number12 index11 alt1">
12</div>
<div class="line number13 index12 alt2">
13</div>
<div class="line number14 index13 alt1">
14</div>
<div class="line number15 index14 alt2">
15</div>
<div class="line number16 index15 alt1">
16</div>
<div class="line number17 index16 alt2">
17</div>
<div class="line number18 index17 alt1">
18</div>
<div class="line number19 index18 alt2">
19</div>
<div class="line number20 index19 alt1">
20</div>
<div class="line number21 index20 alt2">
21</div>
<div class="line number22 index21 alt1">
22</div>
<div class="line number23 index22 alt2">
23</div>
<div class="line number24 index23 alt1">
24</div>
<div class="line number25 index24 alt2">
25</div>
<div class="line number26 index25 alt1">
26</div>
<div class="line number27 index26 alt2">
27</div>
<div class="line number28 index27 alt1">
28</div>
<div class="line number29 index28 alt2">
29</div>
<div class="line number30 index29 alt1">
30</div>
<div class="line number31 index30 alt2">
31</div>
<div class="line number32 index31 alt1">
32</div>
<div class="line number33 index32 alt2">
33</div>
<div class="line number34 index33 alt1">
34</div>
<div class="line number35 index34 alt2">
35</div>
<div class="line number36 index35 alt1">
36</div>
<div class="line number37 index36 alt2">
37</div>
<div class="line number38 index37 alt1">
38</div>
<div class="line number39 index38 alt2">
39</div>
<div class="line number40 index39 alt1">
40</div>
<div class="line number41 index40 alt2">
41</div>
<div class="line number42 index41 alt1">
42</div>
<div class="line number43 index42 alt2">
43</div>
<div class="line number44 index43 alt1">
44</div>
<div class="line number45 index44 alt2">
45</div>
<div class="line number46 index45 alt1">
46</div>
<div class="line number47 index46 alt2">
47</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="sql keyword">select</code> <code class="sql plain">l.col06,l.col05,l.col04,r.col27, r.col26,r.col25</code>
</div>
<div class="line number2 index1 alt1">
<code class="sql keyword">from</code> <code class="sql plain">t_local l, t_remote@dblink_remote r</code>
</div>
<div class="line number3 index2 alt2">
<code class="sql keyword">where</code> <code class="sql plain">l.col01=r.col01</code>
</div>
<div class="line number4 index3 alt1">
<code class="sql plain">;</code>
</div>
<div class="line number5 index4 alt2">
<code class="sql keyword">select</code> <code class="sql plain">* </code><code class="sql keyword">from</code> <code class="sql keyword">table</code><code class="sql plain">( dbms_xplan.display_cursor(</code><code class="sql color1">null</code><code class="sql plain">, </code><code class="sql color1">null</code><code class="sql plain">, </code><code class="sql string">'typical LAST'</code><code class="sql plain">) );</code>
</div>
<div class="line number6 index5 alt1">
<code class="sql plain">PLAN_TABLE_OUTPUT</code>
</div>
<div class="line number7 index6 alt2">
<code class="sql comments">---------------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number8 index7 alt1">
<code class="sql plain">SQL_ID 04schqc3d9rgm, child number 0</code>
</div>
<div class="line number9 index8 alt2">
<code class="sql comments">-------------------------------------</code>
</div>
<div class="line number10 index9 alt1">
<code class="sql keyword">select</code> <code class="sql plain">l.col06,l.col05,l.col04,r.col27, r.col26,r.col25 </code><code class="sql keyword">from</code> <code class="sql plain">t_local l,</code>
</div>
<div class="line number11 index10 alt2">
<code class="sql plain">t_remote@dblink_remote r </code><code class="sql keyword">where</code> <code class="sql plain">l.col01=r.col01</code>
</div>
<div class="line number12 index11 alt1">
<code class="sql plain">Plan hash value: 631452043</code>
</div>
<div class="line number13 index12 alt2">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number14 index13 alt1">
<code class="sql plain">| Id | Operation | </code><code class="sql keyword">Name</code> <code class="sql plain">| </code><code class="sql keyword">Rows</code> <code class="sql plain">| Bytes | Cost (%CPU)| </code><code class="sql keyword">Time</code> <code class="sql plain">| Inst |</code><code class="sql color1">IN</code><code class="sql plain">-</code><code class="sql keyword">OUT</code><code class="sql plain">|</code>
</div>
<div class="line number15 index14 alt2">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number16 index15 alt1">
<code class="sql plain">| 0 | </code><code class="sql keyword">SELECT</code> <code class="sql plain">STATEMENT | | | | 53 (100)| | | |</code>
</div>
<div class="line number17 index16 alt2">
<code class="sql plain">| 1 | NESTED LOOPS | | 50 | 6300 | 53 (0)| 00:00:01 | | |</code>
</div>
<div class="line number18 index17 alt1">
<code class="sql plain">| 2 | </code><code class="sql keyword">TABLE</code> <code class="sql plain">ACCESS </code><code class="sql keyword">FULL</code><code class="sql plain">| T_LOCAL | 50 | 3000 | 3 (0)| 00:00:01 | | |</code>
</div>
<div class="line number19 index18 alt2">
<code class="sql plain">| 3 | REMOTE | T_REMOTE | 1 | 66 | 1 (0)| 00:00:01 | DBLIN~ | R->S |</code>
</div>
<div class="line number20 index19 alt1">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number21 index20 alt2">
<code class="sql plain">Remote SQL Information (identified </code><code class="sql keyword">by</code> <code class="sql plain">operation id):</code>
</div>
<div class="line number22 index21 alt1">
<code class="sql comments">----------------------------------------------------</code>
</div>
<div class="line number23 index22 alt2">
<code class="sql spaces"> </code><code class="sql plain">3 - </code><code class="sql keyword">SELECT</code> <code class="sql string">"COL01"</code><code class="sql plain">,</code><code class="sql string">"COL25"</code><code class="sql plain">,</code><code class="sql string">"COL26"</code><code class="sql plain">,</code><code class="sql string">"COL27"</code> <code class="sql keyword">FROM</code> <code class="sql string">"T_REMOTE"</code> <code class="sql string">"R"</code> <code class="sql keyword">WHERE</code> <code class="sql plain">:1=</code><code class="sql string">"COL01"</code>
</div>
<div class="line number24 index23 alt1">
<code class="sql spaces"> </code><code class="sql plain">(accessing </code><code class="sql string">'DBLINK_REMOTE'</code> <code class="sql plain">)</code>
</div>
<div class="line number25 index24 alt2">
<code class="sql spaces"> </code>
</div>
<div class="line number26 index25 alt1">
<code class="sql plain">23 </code><code class="sql keyword">rows</code> <code class="sql plain">selected.</code>
</div>
<div class="line number27 index26 alt2">
<code class="sql plain">SQL> </code>
</div>
<div class="line number28 index27 alt1">
<code class="sql comments">-- 我们这里注意一下,WHERE :1="COL01"的存在,正是因为这个条件,所以在远程是走了主键而不是全表扫。我们把这个语句带入到远程执行。</code>
</div>
<div class="line number29 index28 alt2">
<code class="sql plain">远程:</code>
</div>
<div class="line number30 index29 alt1">
<code class="sql plain">SQL> explain plan </code><code class="sql keyword">for</code>
</div>
<div class="line number31 index30 alt2">
<code class="sql spaces"> </code><code class="sql plain">2 </code><code class="sql keyword">SELECT</code> <code class="sql string">"COL01"</code><code class="sql plain">,</code><code class="sql string">"COL25"</code><code class="sql plain">,</code><code class="sql string">"COL26"</code><code class="sql plain">,</code><code class="sql string">"COL27"</code> <code class="sql keyword">FROM</code> <code class="sql string">"T_REMOTE"</code> <code class="sql string">"R"</code> <code class="sql keyword">WHERE</code> <code class="sql plain">:1=</code><code class="sql string">"COL01"</code><code class="sql plain">;</code>
</div>
<div class="line number32 index31 alt1">
<code class="sql plain">PLAN_TABLE_OUTPUT</code>
</div>
<div class="line number33 index32 alt2">
<code class="sql comments">------------------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number34 index33 alt1">
<code class="sql plain">Plan hash value: 829680338</code>
</div>
<div class="line number35 index34 alt2">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number36 index35 alt1">
<code class="sql plain">| Id | Operation | </code><code class="sql keyword">Name</code> <code class="sql plain">| </code><code class="sql keyword">Rows</code> <code class="sql plain">| Bytes | Cost (%CPU)| </code><code class="sql keyword">Time</code> <code class="sql plain">|</code>
</div>
<div class="line number37 index36 alt2">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number38 index37 alt1">
<code class="sql plain">| 0 | </code><code class="sql keyword">SELECT</code> <code class="sql plain">STATEMENT | | 1 | 63 | 2 (0)| 00:00:01 |</code>
</div>
<div class="line number39 index38 alt2">
<code class="sql plain">| 1 | </code><code class="sql keyword">TABLE</code> <code class="sql plain">ACCESS </code><code class="sql keyword">BY</code> <code class="sql keyword">INDEX</code> <code class="sql plain">ROWID| T_REMOTE | 1 | 63 | 2 (0)| 00:00:01 |</code>
</div>
<div class="line number40 index39 alt1">
<code class="sql plain">|* 2 | </code><code class="sql keyword">INDEX</code> <code class="sql keyword">UNIQUE</code> <code class="sql plain">SCAN | T_REMOTE_I01_PK | 1 | | 1 (0)| 00:00:01 |</code>
</div>
<div class="line number41 index40 alt2">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number42 index41 alt1">
<code class="sql plain">Predicate Information (identified </code><code class="sql keyword">by</code> <code class="sql plain">operation id):</code>
</div>
<div class="line number43 index42 alt2">
<code class="sql plain">PLAN_TABLE_OUTPUT</code>
</div>
<div class="line number44 index43 alt1">
<code class="sql comments">------------------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number45 index44 alt2">
<code class="sql comments">---------------------------------------------------</code>
</div>
<div class="line number46 index45 alt1">
<code class="sql spaces"> </code><code class="sql plain">2 - access(</code><code class="sql string">"COL01"</code><code class="sql plain">=TO_NUMBER(:1))</code>
</div>
<div class="line number47 index46 alt2">
<code class="sql plain">14 </code><code class="sql keyword">rows</code> <code class="sql plain">selected.</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
我们可以看到,对于远程表的执行计划,这是走主键的。</p>
<p>
<span><strong>测试场景2:</strong></span></p>
<p>
在远程表20索引的情况下,本地表和远程表关联,用本地表的第一个字段关联远程表的第20个字段:</p>
<div class="jb51code">
<div>
<div class="syntaxhighlightersql" id="highlighter_329189">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
<div class="line number8 index7 alt1">
8</div>
<div class="line number9 index8 alt2">
9</div>
<div class="line number10 index9 alt1">
10</div>
<div class="line number11 index10 alt2">
11</div>
<div class="line number12 index11 alt1">
12</div>
<div class="line number13 index12 alt2">
13</div>
<div class="line number14 index13 alt1">
14</div>
<div class="line number15 index14 alt2">
15</div>
<div class="line number16 index15 alt1">
16</div>
<div class="line number17 index16 alt2">
17</div>
<div class="line number18 index17 alt1">
18</div>
<div class="line number19 index18 alt2">
19</div>
<div class="line number20 index19 alt1">
20</div>
<div class="line number21 index20 alt2">
21</div>
<div class="line number22 index21 alt1">
22</div>
<div class="line number23 index22 alt2">
23</div>
<div class="line number24 index23 alt1">
24</div>
<div class="line number25 index24 alt2">
25</div>
<div class="line number26 index25 alt1">
26</div>
<div class="line number27 index26 alt2">
27</div>
<div class="line number28 index27 alt1">
28</div>
<div class="line number29 index28 alt2">
29</div>
<div class="line number30 index29 alt1">
30</div>
<div class="line number31 index30 alt2">
31</div>
<div class="line number32 index31 alt1">
32</div>
<div class="line number33 index32 alt2">
33</div>
<div class="line number34 index33 alt1">
34</div>
<div class="line number35 index34 alt2">
35</div>
<div class="line number36 index35 alt1">
36</div>
<div class="line number37 index36 alt2">
37</div>
<div class="line number38 index37 alt1">
38</div>
<div class="line number39 index38 alt2">
39</div>
<div class="line number40 index39 alt1">
40</div>
<div class="line number41 index40 alt2">
41</div>
<div class="line number42 index41 alt1">
42</div>
<div class="line number43 index42 alt2">
43</div>
<div class="line number44 index43 alt1">
44</div>
<div class="line number45 index44 alt2">
45</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="sql keyword">select</code> <code class="sql plain">l.col06,l.col05,l.col04,r.col27, r.col26,r.col25</code>
</div>
<div class="line number2 index1 alt1">
<code class="sql keyword">from</code> <code class="sql plain">t_local l, t_remote@dblink_remote r</code>
</div>
<div class="line number3 index2 alt2">
<code class="sql keyword">where</code> <code class="sql plain">l.col01=r.col20</code>
</div>
<div class="line number4 index3 alt1">
<code class="sql plain">;</code>
</div>
<div class="line number5 index4 alt2">
<code class="sql keyword">select</code> <code class="sql plain">* </code><code class="sql keyword">from</code> <code class="sql keyword">table</code><code class="sql plain">( dbms_xplan.display_cursor(</code><code class="sql color1">null</code><code class="sql plain">, </code><code class="sql color1">null</code><code class="sql plain">, </code><code class="sql string">'typical LAST'</code><code class="sql plain">) );</code>
</div>
<div class="line number6 index5 alt1">
<code class="sql plain">PLAN_TABLE_OUTPUT</code>
</div>
<div class="line number7 index6 alt2">
<code class="sql comments">---------------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number8 index7 alt1">
<code class="sql plain">SQL_ID 5rwtbwcnv0tsm, child number 0</code>
</div>
<div class="line number9 index8 alt2">
<code class="sql comments">-------------------------------------</code>
</div>
<div class="line number10 index9 alt1">
<code class="sql keyword">select</code> <code class="sql plain">l.col06,l.col05,l.col04,r.col27, r.col26,r.col25 </code><code class="sql keyword">from</code> <code class="sql plain">t_local l,</code>
</div>
<div class="line number11 index10 alt2">
<code class="sql plain">t_remote@dblink_remote r </code><code class="sql keyword">where</code> <code class="sql plain">l.col01=r.col20</code>
</div>
<div class="line number12 index11 alt1">
<code class="sql plain">Plan hash value: 631452043</code>
</div>
<div class="line number13 index12 alt2">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number14 index13 alt1">
<code class="sql plain">| Id | Operation | </code><code class="sql keyword">Name</code> <code class="sql plain">| </code><code class="sql keyword">Rows</code> <code class="sql plain">| Bytes | Cost (%CPU)| </code><code class="sql keyword">Time</code> <code class="sql plain">| Inst |</code><code class="sql color1">IN</code><code class="sql plain">-</code><code class="sql keyword">OUT</code><code class="sql plain">|</code>
</div>
<div class="line number15 index14 alt2">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number16 index15 alt1">
<code class="sql plain">| 0 | </code><code class="sql keyword">SELECT</code> <code class="sql plain">STATEMENT | | | | 103 (100)| | | |</code>
</div>
<div class="line number17 index16 alt2">
<code class="sql plain">| 1 | NESTED LOOPS | | 50 | 6300 | 103 (0)| 00:00:01 | | |</code>
</div>
<div class="line number18 index17 alt1">
<code class="sql plain">| 2 | </code><code class="sql keyword">TABLE</code> <code class="sql plain">ACCESS </code><code class="sql keyword">FULL</code><code class="sql plain">| T_LOCAL | 50 | 3000 | 3 (0)| 00:00:01 | | |</code>
</div>
<div class="line number19 index18 alt2">
<code class="sql plain">| 3 | REMOTE | T_REMOTE | 1 | 66 | 2 (0)| 00:00:01 | DBLIN~ | R->S |</code>
</div>
<div class="line number20 index19 alt1">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number21 index20 alt2">
<code class="sql plain">Remote SQL Information (identified </code><code class="sql keyword">by</code> <code class="sql plain">operation id):</code>
</div>
<div class="line number22 index21 alt1">
<code class="sql comments">----------------------------------------------------</code>
</div>
<div class="line number23 index22 alt2">
<code class="sql spaces"> </code><code class="sql plain">3 - </code><code class="sql keyword">SELECT</code> <code class="sql string">"COL20"</code><code class="sql plain">,</code><code class="sql string">"COL25"</code><code class="sql plain">,</code><code class="sql string">"COL26"</code><code class="sql plain">,</code><code class="sql string">"COL27"</code> <code class="sql keyword">FROM</code> <code class="sql string">"T_REMOTE"</code> <code class="sql string">"R"</code> <code class="sql keyword">WHERE</code> <code class="sql plain">:1=</code><code class="sql string">"COL20"</code>
</div>
<div class="line number24 index23 alt1">
<code class="sql spaces"> </code><code class="sql plain">(accessing </code><code class="sql string">'DBLINK_REMOTE'</code> <code class="sql plain">)</code>
</div>
<div class="line number25 index24 alt2">
<code class="sql spaces"> </code>
</div>
<div class="line number26 index25 alt1">
<code class="sql plain">23 </code><code class="sql keyword">rows</code> <code class="sql plain">selected.</code>
</div>
<div class="line number27 index26 alt2">
<code class="sql plain">SQL> </code>
</div>
<div class="line number28 index27 alt1">
<code class="sql plain">远程:</code>
</div>
<div class="line number29 index28 alt2">
<code class="sql plain">PLAN_TABLE_OUTPUT</code>
</div>
<div class="line number30 index29 alt1">
<code class="sql comments">------------------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number31 index30 alt2">
<code class="sql plain">Plan hash value: 3993494813</code>
</div>
<div class="line number32 index31 alt1">
<code class="sql comments">----------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number33 index32 alt2">
<code class="sql plain">| Id | Operation | </code><code class="sql keyword">Name</code> <code class="sql plain">| </code><code class="sql keyword">Rows</code> <code class="sql plain">| Bytes | Cost (%CPU)| </code><code class="sql keyword">Time</code> <code class="sql plain">|</code>
</div>
<div class="line number34 index33 alt1">
<code class="sql comments">----------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number35 index34 alt2">
<code class="sql plain">| 0 | </code><code class="sql keyword">SELECT</code> <code class="sql plain">STATEMENT | | 1 | 63 | 2 (0)| 00:00:01 |</code>
</div>
<div class="line number36 index35 alt1">
<code class="sql plain">| 1 | </code><code class="sql keyword">TABLE</code> <code class="sql plain">ACCESS </code><code class="sql keyword">BY</code> <code class="sql keyword">INDEX</code> <code class="sql plain">ROWID BATCHED| T_REMOTE | 1 | 63 | 2 (0)| 00:00:01 |</code>
</div>
<div class="line number37 index36 alt2">
<code class="sql plain">|* 2 | </code><code class="sql keyword">INDEX</code> <code class="sql plain">RANGE SCAN | T_REMOTE_I20 | 1 | | 1 (0)| 00:00:01 |</code>
</div>
<div class="line number38 index37 alt1">
<code class="sql comments">----------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number39 index38 alt2">
<code class="sql plain">Predicate Information (identified </code><code class="sql keyword">by</code> <code class="sql plain">operation id):</code>
</div>
<div class="line number40 index39 alt1">
<code class="sql plain">PLAN_TABLE_OUTPUT</code>
</div>
<div class="line number41 index40 alt2">
<code class="sql comments">------------------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number42 index41 alt1">
<code class="sql comments">---------------------------------------------------</code>
</div>
<div class="line number43 index42 alt2">
<code class="sql spaces"> </code><code class="sql plain">2 - access(</code><code class="sql string">"COL20"</code><code class="sql plain">=TO_NUMBER(:1))</code>
</div>
<div class="line number44 index43 alt1">
<code class="sql plain">14 </code><code class="sql keyword">rows</code> <code class="sql plain">selected.</code>
</div>
<div class="line number45 index44 alt2">
<code class="sql plain">SQL></code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
我们可以看到,对于远程表的执行计划,这是走索引范围扫描的。</p>
<p>
<span><strong>测试场景3:</strong></span></p>
<p>
在远程表20索引的情况下,本地表和远程表关联,用本地表的第2个字段关联远程表的第2个字段:</p>
<div class="jb51code">
<div>
<div class="syntaxhighlightersql" id="highlighter_425039">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
<div class="line number8 index7 alt1">
8</div>
<div class="line number9 index8 alt2">
9</div>
<div class="line number10 index9 alt1">
10</div>
<div class="line number11 index10 alt2">
11</div>
<div class="line number12 index11 alt1">
12</div>
<div class="line number13 index12 alt2">
13</div>
<div class="line number14 index13 alt1">
14</div>
<div class="line number15 index14 alt2">
15</div>
<div class="line number16 index15 alt1">
16</div>
<div class="line number17 index16 alt2">
17</div>
<div class="line number18 index17 alt1">
18</div>
<div class="line number19 index18 alt2">
19</div>
<div class="line number20 index19 alt1">
20</div>
<div class="line number21 index20 alt2">
21</div>
<div class="line number22 index21 alt1">
22</div>
<div class="line number23 index22 alt2">
23</div>
<div class="line number24 index23 alt1">
24</div>
<div class="line number25 index24 alt2">
25</div>
<div class="line number26 index25 alt1">
26</div>
<div class="line number27 index26 alt2">
27</div>
<div class="line number28 index27 alt1">
28</div>
<div class="line number29 index28 alt2">
29</div>
<div class="line number30 index29 alt1">
30</div>
<div class="line number31 index30 alt2">
31</div>
<div class="line number32 index31 alt1">
32</div>
<div class="line number33 index32 alt2">
33</div>
<div class="line number34 index33 alt1">
34</div>
<div class="line number35 index34 alt2">
35</div>
<div class="line number36 index35 alt1">
36</div>
<div class="line number37 index36 alt2">
37</div>
<div class="line number38 index37 alt1">
38</div>
<div class="line number39 index38 alt2">
39</div>
<div class="line number40 index39 alt1">
40</div>
<div class="line number41 index40 alt2">
41</div>
<div class="line number42 index41 alt1">
42</div>
<div class="line number43 index42 alt2">
43</div>
<div class="line number44 index43 alt1">
44</div>
<div class="line number45 index44 alt2">
45</div>
<div class="line number46 index45 alt1">
46</div>
<div class="line number47 index46 alt2">
47</div>
<div class="line number48 index47 alt1">
48</div>
<div class="line number49 index48 alt2">
49</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="sql keyword">select</code> <code class="sql plain">l.col06,l.col05,l.col04,r.col27, r.col26,r.col25</code>
</div>
<div class="line number2 index1 alt1">
<code class="sql keyword">from</code> <code class="sql plain">t_local l, t_remote@dblink_remote r</code>
</div>
<div class="line number3 index2 alt2">
<code class="sql keyword">where</code> <code class="sql plain">l.col02=r.col02</code>
</div>
<div class="line number4 index3 alt1">
<code class="sql plain">;</code>
</div>
<div class="line number5 index4 alt2">
<code class="sql keyword">select</code> <code class="sql plain">* </code><code class="sql keyword">from</code> <code class="sql keyword">table</code><code class="sql plain">( dbms_xplan.display_cursor(</code><code class="sql color1">null</code><code class="sql plain">, </code><code class="sql color1">null</code><code class="sql plain">, </code><code class="sql string">'typical LAST'</code><code class="sql plain">) );</code>
</div>
<div class="line number6 index5 alt1">
<code class="sql plain">PLAN_TABLE_OUTPUT</code>
</div>
<div class="line number7 index6 alt2">
<code class="sql comments">---------------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number8 index7 alt1">
<code class="sql plain">SQL_ID 81ctrx5huhfvq, child number 0</code>
</div>
<div class="line number9 index8 alt2">
<code class="sql comments">-------------------------------------</code>
</div>
<div class="line number10 index9 alt1">
<code class="sql keyword">select</code> <code class="sql plain">l.col06,l.col05,l.col04,r.col27, r.col26,r.col25 </code><code class="sql keyword">from</code> <code class="sql plain">t_local l,</code>
</div>
<div class="line number11 index10 alt2">
<code class="sql plain">t_remote@dblink_remote r </code><code class="sql keyword">where</code> <code class="sql plain">l.col02=r.col02</code>
</div>
<div class="line number12 index11 alt1">
<code class="sql plain">Plan hash value: 631452043</code>
</div>
<div class="line number13 index12 alt2">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number14 index13 alt1">
<code class="sql plain">| Id | Operation | </code><code class="sql keyword">Name</code> <code class="sql plain">| </code><code class="sql keyword">Rows</code> <code class="sql plain">| Bytes | Cost (%CPU)| </code><code class="sql keyword">Time</code> <code class="sql plain">| Inst |</code><code class="sql color1">IN</code><code class="sql plain">-</code><code class="sql keyword">OUT</code><code class="sql plain">|</code>
</div>
<div class="line number15 index14 alt2">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number16 index15 alt1">
<code class="sql plain">| 0 | </code><code class="sql keyword">SELECT</code> <code class="sql plain">STATEMENT | | | | 103 (100)| | | |</code>
</div>
<div class="line number17 index16 alt2">
<code class="sql plain">| 1 | NESTED LOOPS | | 50 | 6300 | 103 (0)| 00:00:01 | | |</code>
</div>
<div class="line number18 index17 alt1">
<code class="sql plain">| 2 | </code><code class="sql keyword">TABLE</code> <code class="sql plain">ACCESS </code><code class="sql keyword">FULL</code><code class="sql plain">| T_LOCAL | 50 | 3000 | 3 (0)| 00:00:01 | | |</code>
</div>
<div class="line number19 index18 alt2">
<code class="sql plain">| 3 | REMOTE | T_REMOTE | 1 | 66 | 2 (0)| 00:00:01 | DBLIN~ | R->S |</code>
</div>
<div class="line number20 index19 alt1">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number21 index20 alt2">
<code class="sql plain">Remote SQL Information (identified </code><code class="sql keyword">by</code> <code class="sql plain">operation id):</code>
</div>
<div class="line number22 index21 alt1">
<code class="sql comments">----------------------------------------------------</code>
</div>
<div class="line number23 index22 alt2">
<code class="sql spaces"> </code><code class="sql plain">3 - </code><code class="sql keyword">SELECT</code> <code class="sql string">"COL02"</code><code class="sql plain">,</code><code class="sql string">"COL25"</code><code class="sql plain">,</code><code class="sql string">"COL26"</code><code class="sql plain">,</code><code class="sql string">"COL27"</code> <code class="sql keyword">FROM</code> <code class="sql string">"T_REMOTE"</code> <code class="sql string">"R"</code> <code class="sql keyword">WHERE</code> <code class="sql plain">:1=</code><code class="sql string">"COL02"</code>
</div>
<div class="line number24 index23 alt1">
<code class="sql spaces"> </code><code class="sql plain">(accessing </code><code class="sql string">'DBLINK_REMOTE'</code> <code class="sql plain">)</code>
</div>
<div class="line number25 index24 alt2">
<code class="sql spaces"> </code>
</div>
<div class="line number26 index25 alt1">
<code class="sql plain">23 </code><code class="sql keyword">rows</code> <code class="sql plain">selected.</code>
</div>
<div class="line number27 index26 alt2">
<code class="sql plain">SQL> </code>
</div>
<div class="line number28 index27 alt1">
<code class="sql plain">远程:</code>
</div>
<div class="line number29 index28 alt2">
<code class="sql plain">SQL> explain plan </code><code class="sql keyword">for</code>
</div>
<div class="line number30 index29 alt1">
<code class="sql spaces"> </code><code class="sql plain">2 </code><code class="sql keyword">SELECT</code> <code class="sql string">"COL02"</code><code class="sql plain">,</code><code class="sql string">"COL25"</code><code class="sql plain">,</code><code class="sql string">"COL26"</code><code class="sql plain">,</code><code class="sql string">"COL27"</code> <code class="sql keyword">FROM</code> <code class="sql string">"T_REMOTE"</code> <code class="sql string">"R"</code> <code class="sql keyword">WHERE</code> <code class="sql plain">:1=</code><code class="sql string">"COL02"</code><code class="sql plain">;</code>
</div>
<div class="line number31 index30 alt2">
<code class="sql plain">Explained.</code>
</div>
<div class="line number32 index31 alt1">
<code class="sql plain">SQL> </code><code class="sql keyword">select</code> <code class="sql plain">* </code><code class="sql keyword">from</code> <code class="sql keyword">table</code><code class="sql plain">(dbms_xplan.display());</code>
</div>
<div class="line number33 index32 alt2">
<code class="sql plain">PLAN_TABLE_OUTPUT</code>
</div>
<div class="line number34 index33 alt1">
<code class="sql comments">------------------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number35 index34 alt2">
<code class="sql plain">Plan hash value: 2505594687</code>
</div>
<div class="line number36 index35 alt1">
<code class="sql comments">----------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number37 index36 alt2">
<code class="sql plain">| Id | Operation | </code><code class="sql keyword">Name</code> <code class="sql plain">| </code><code class="sql keyword">Rows</code> <code class="sql plain">| Bytes | Cost (%CPU)| </code><code class="sql keyword">Time</code> <code class="sql plain">|</code>
</div>
<div class="line number38 index37 alt1">
<code class="sql comments">----------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number39 index38 alt2">
<code class="sql plain">| 0 | </code><code class="sql keyword">SELECT</code> <code class="sql plain">STATEMENT | | 1 | 63 | 2 (0)| 00:00:01 |</code>
</div>
<div class="line number40 index39 alt1">
<code class="sql plain">| 1 | </code><code class="sql keyword">TABLE</code> <code class="sql plain">ACCESS </code><code class="sql keyword">BY</code> <code class="sql keyword">INDEX</code> <code class="sql plain">ROWID BATCHED| T_REMOTE | 1 | 63 | 2 (0)| 00:00:01 |</code>
</div>
<div class="line number41 index40 alt2">
<code class="sql plain">|* 2 | </code><code class="sql keyword">INDEX</code> <code class="sql plain">RANGE SCAN | T_REMOTE_I02 | 1 | | 1 (0)| 00:00:01 |</code>
</div>
<div class="line number42 index41 alt1">
<code class="sql comments">----------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number43 index42 alt2">
<code class="sql plain">Predicate Information (identified </code><code class="sql keyword">by</code> <code class="sql plain">operation id):</code>
</div>
<div class="line number44 index43 alt1">
<code class="sql plain">PLAN_TABLE_OUTPUT</code>
</div>
<div class="line number45 index44 alt2">
<code class="sql comments">------------------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number46 index45 alt1">
<code class="sql comments">---------------------------------------------------</code>
</div>
<div class="line number47 index46 alt2">
<code class="sql spaces"> </code><code class="sql plain">2 - access(</code><code class="sql string">"COL02"</code><code class="sql plain">=TO_NUMBER(:1))</code>
</div>
<div class="line number48 index47 alt1">
<code class="sql plain">14 </code><code class="sql keyword">rows</code> <code class="sql plain">selected.</code>
</div>
<div class="line number49 index48 alt2">
<code class="sql plain">SQL></code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
我们可以看到,对于远程表的执行计划,这是走索引范围扫描的。</p>
<p>
<span><strong>测试场景4:</strong></span></p>
<p>
在远程表20索引的情况下,本地表和远程表关联,用本地表的第2个字段关联远程表的第20个字段:</p>
<div class="jb51code">
<div>
<div class="syntaxhighlightersql" id="highlighter_354379">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
<div class="line number8 index7 alt1">
8</div>
<div class="line number9 index8 alt2">
9</div>
<div class="line number10 index9 alt1">
10</div>
<div class="line number11 index10 alt2">
11</div>
<div class="line number12 index11 alt1">
12</div>
<div class="line number13 index12 alt2">
13</div>
<div class="line number14 index13 alt1">
14</div>
<div class="line number15 index14 alt2">
15</div>
<div class="line number16 index15 alt1">
16</div>
<div class="line number17 index16 alt2">
17</div>
<div class="line number18 index17 alt1">
18</div>
<div class="line number19 index18 alt2">
19</div>
<div class="line number20 index19 alt1">
20</div>
<div class="line number21 index20 alt2">
21</div>
<div class="line number22 index21 alt1">
22</div>
<div class="line number23 index22 alt2">
23</div>
<div class="line number24 index23 alt1">
24</div>
<div class="line number25 index24 alt2">
25</div>
<div class="line number26 index25 alt1">
26</div>
<div class="line number27 index26 alt2">
27</div>
<div class="line number28 index27 alt1">
28</div>
<div class="line number29 index28 alt2">
29</div>
<div class="line number30 index29 alt1">
30</div>
<div class="line number31 index30 alt2">
31</div>
<div class="line number32 index31 alt1">
32</div>
<div class="line number33 index32 alt2">
33</div>
<div class="line number34 index33 alt1">
34</div>
<div class="line number35 index34 alt2">
35</div>
<div class="line number36 index35 alt1">
36</div>
<div class="line number37 index36 alt2">
37</div>
<div class="line number38 index37 alt1">
38</div>
<div class="line number39 index38 alt2">
39</div>
<div class="line number40 index39 alt1">
40</div>
<div class="line number41 index40 alt2">
41</div>
<div class="line number42 index41 alt1">
42</div>
<div class="line number43 index42 alt2">
43</div>
<div class="line number44 index43 alt1">
44</div>
<div class="line number45 index44 alt2">
45</div>
<div class="line number46 index45 alt1">
46</div>
<div class="line number47 index46 alt2">
47</div>
<div class="line number48 index47 alt1">
48</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="sql keyword">select</code> <code class="sql plain">l.col06,l.col05,l.col04,r.col27, r.col26,r.col25</code>
</div>
<div class="line number2 index1 alt1">
<code class="sql keyword">from</code> <code class="sql plain">t_local l, t_remote@dblink_remote r</code>
</div>
<div class="line number3 index2 alt2">
<code class="sql keyword">where</code> <code class="sql plain">l.col02=r.col20</code>
</div>
<div class="line number4 index3 alt1">
<code class="sql plain">;</code>
</div>
<div class="line number5 index4 alt2">
<code class="sql keyword">select</code> <code class="sql plain">* </code><code class="sql keyword">from</code> <code class="sql keyword">table</code><code class="sql plain">( dbms_xplan.display_cursor(</code><code class="sql color1">null</code><code class="sql plain">, </code><code class="sql color1">null</code><code class="sql plain">, </code><code class="sql string">'typical LAST'</code><code class="sql plain">) );</code>
</div>
<div class="line number6 index5 alt1">
<code class="sql plain">PLAN_TABLE_OUTPUT</code>
</div>
<div class="line number7 index6 alt2">
<code class="sql comments">---------------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number8 index7 alt1">
<code class="sql plain">SQL_ID 407pxjh9mgbry, child number 0</code>
</div>
<div class="line number9 index8 alt2">
<code class="sql comments">-------------------------------------</code>
</div>
<div class="line number10 index9 alt1">
<code class="sql keyword">select</code> <code class="sql plain">l.col06,l.col05,l.col04,r.col27, r.col26,r.col25 </code><code class="sql keyword">from</code> <code class="sql plain">t_local l,</code>
</div>
<div class="line number11 index10 alt2">
<code class="sql plain">t_remote@dblink_remote r </code><code class="sql keyword">where</code> <code class="sql plain">l.col02=r.col20</code>
</div>
<div class="line number12 index11 alt1">
<code class="sql plain">Plan hash value: 631452043</code>
</div>
<div class="line number13 index12 alt2">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number14 index13 alt1">
<code class="sql plain">| Id | Operation | </code><code class="sql keyword">Name</code> <code class="sql plain">| </code><code class="sql keyword">Rows</code> <code class="sql plain">| Bytes | Cost (%CPU)| </code><code class="sql keyword">Time</code> <code class="sql plain">| Inst |</code><code class="sql color1">IN</code><code class="sql plain">-</code><code class="sql keyword">OUT</code><code class="sql plain">|</code>
</div>
<div class="line number15 index14 alt2">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number16 index15 alt1">
<code class="sql plain">| 0 | </code><code class="sql keyword">SELECT</code> <code class="sql plain">STATEMENT | | | | 103 (100)| | | |</code>
</div>
<div class="line number17 index16 alt2">
<code class="sql plain">| 1 | NESTED LOOPS | | 50 | 6300 | 103 (0)| 00:00:01 | | |</code>
</div>
<div class="line number18 index17 alt1">
<code class="sql plain">| 2 | </code><code class="sql keyword">TABLE</code> <code class="sql plain">ACCESS </code><code class="sql keyword">FULL</code><code class="sql plain">| T_LOCAL | 50 | 3000 | 3 (0)| 00:00:01 | | |</code>
</div>
<div class="line number19 index18 alt2">
<code class="sql plain">| 3 | REMOTE | T_REMOTE | 1 | 66 | 2 (0)| 00:00:01 | DBLIN~ | R->S |</code>
</div>
<div class="line number20 index19 alt1">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number21 index20 alt2">
<code class="sql plain">Remote SQL Information (identified </code><code class="sql keyword">by</code> <code class="sql plain">operation id):</code>
</div>
<div class="line number22 index21 alt1">
<code class="sql comments">----------------------------------------------------</code>
</div>
<div class="line number23 index22 alt2">
<code class="sql spaces"> </code><code class="sql plain">3 - </code><code class="sql keyword">SELECT</code> <code class="sql string">"COL20"</code><code class="sql plain">,</code><code class="sql string">"COL25"</code><code class="sql plain">,</code><code class="sql string">"COL26"</code><code class="sql plain">,</code><code class="sql string">"COL27"</code> <code class="sql keyword">FROM</code> <code class="sql string">"T_REMOTE"</code> <code class="sql string">"R"</code> <code class="sql keyword">WHERE</code> <code class="sql plain">:1=</code><code class="sql string">"COL20"</code>
</div>
<div class="line number24 index23 alt1">
<code class="sql spaces"> </code><code class="sql plain">(accessing </code><code class="sql string">'DBLINK_REMOTE'</code> <code class="sql plain">)</code>
</div>
<div class="line number25 index24 alt2">
<code class="sql plain">23 </code><code class="sql keyword">rows</code> <code class="sql plain">selected.</code>
</div>
<div class="line number26 index25 alt1">
<code class="sql plain">SQL> </code>
</div>
<div class="line number27 index26 alt2">
<code class="sql plain">远程:</code>
</div>
<div class="line number28 index27 alt1">
<code class="sql plain">SQL> explain plan </code><code class="sql keyword">for</code>
</div>
<div class="line number29 index28 alt2">
<code class="sql spaces"> </code><code class="sql plain">2 </code><code class="sql keyword">SELECT</code> <code class="sql string">"COL20"</code><code class="sql plain">,</code><code class="sql string">"COL25"</code><code class="sql plain">,</code><code class="sql string">"COL26"</code><code class="sql plain">,</code><code class="sql string">"COL27"</code> <code class="sql keyword">FROM</code> <code class="sql string">"T_REMOTE"</code> <code class="sql string">"R"</code> <code class="sql keyword">WHERE</code> <code class="sql plain">:1=</code><code class="sql string">"COL20"</code><code class="sql plain">;</code>
</div>
<div class="line number30 index29 alt1">
<code class="sql plain">Explained.</code>
</div>
<div class="line number31 index30 alt2">
<code class="sql plain">SQL> </code><code class="sql keyword">select</code> <code class="sql plain">* </code><code class="sql keyword">from</code> <code class="sql keyword">table</code><code class="sql plain">(dbms_xplan.display());</code>
</div>
<div class="line number32 index31 alt1">
<code class="sql plain">PLAN_TABLE_OUTPUT</code>
</div>
<div class="line number33 index32 alt2">
<code class="sql comments">------------------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number34 index33 alt1">
<code class="sql plain">Plan hash value: 3993494813</code>
</div>
<div class="line number35 index34 alt2">
<code class="sql comments">----------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number36 index35 alt1">
<code class="sql plain">| Id | Operation | </code><code class="sql keyword">Name</code> <code class="sql plain">| </code><code class="sql keyword">Rows</code> <code class="sql plain">| Bytes | Cost (%CPU)| </code><code class="sql keyword">Time</code> <code class="sql plain">|</code>
</div>
<div class="line number37 index36 alt2">
<code class="sql comments">----------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number38 index37 alt1">
<code class="sql plain">| 0 | </code><code class="sql keyword">SELECT</code> <code class="sql plain">STATEMENT | | 1 | 63 | 2 (0)| 00:00:01 |</code>
</div>
<div class="line number39 index38 alt2">
<code class="sql plain">| 1 | </code><code class="sql keyword">TABLE</code> <code class="sql plain">ACCESS </code><code class="sql keyword">BY</code> <code class="sql keyword">INDEX</code> <code class="sql plain">ROWID BATCHED| T_REMOTE | 1 | 63 | 2 (0)| 00:00:01 |</code>
</div>
<div class="line number40 index39 alt1">
<code class="sql plain">|* 2 | </code><code class="sql keyword">INDEX</code> <code class="sql plain">RANGE SCAN | T_REMOTE_I20 | 1 | | 1 (0)| 00:00:01 |</code>
</div>
<div class="line number41 index40 alt2">
<code class="sql comments">----------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number42 index41 alt1">
<code class="sql plain">Predicate Information (identified </code><code class="sql keyword">by</code> <code class="sql plain">operation id):</code>
</div>
<div class="line number43 index42 alt2">
<code class="sql plain">PLAN_TABLE_OUTPUT</code>
</div>
<div class="line number44 index43 alt1">
<code class="sql comments">------------------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number45 index44 alt2">
<code class="sql comments">---------------------------------------------------</code>
</div>
<div class="line number46 index45 alt1">
<code class="sql spaces"> </code><code class="sql plain">2 - access(</code><code class="sql string">"COL20"</code><code class="sql plain">=TO_NUMBER(:1))</code>
</div>
<div class="line number47 index46 alt2">
<code class="sql plain">14 </code><code class="sql keyword">rows</code> <code class="sql plain">selected.</code>
</div>
<div class="line number48 index47 alt1">
<code class="sql plain">SQL></code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
我们可以看到,对于远程表的执行计划,这是走索引范围扫描的。</p>
<p>
<span><span><strong>(三)建立第21个索引:</strong></span></span></p>
<div class="jb51code">
<div>
<div class="syntaxhighlightersql" id="highlighter_335802">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="sql keyword">create</code> <code class="sql keyword">index</code> <code class="sql plain">t_remote_i21 </code><code class="sql keyword">on</code> <code class="sql plain">t_remote (col21);</code>
</div>
<div class="line number2 index1 alt1">
<code class="sql keyword">exec</code> <code class="sql plain">dbms_stats.gather_table_stats(</code><code class="sql color2">user</code><code class="sql plain">,</code><code class="sql string">'T_REMOTE'</code><code class="sql plain">);</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
<span><span><strong>(四)远程表上现在有21个索引,重复上面4个测试:</strong></span></span></p>
<p>
<span><strong>测试场景1:</strong></span></p>
<div class="jb51code">
<div>
<div class="syntaxhighlightersql" id="highlighter_998139">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
<div class="line number8 index7 alt1">
8</div>
<div class="line number9 index8 alt2">
9</div>
<div class="line number10 index9 alt1">
10</div>
<div class="line number11 index10 alt2">
11</div>
<div class="line number12 index11 alt1">
12</div>
<div class="line number13 index12 alt2">
13</div>
<div class="line number14 index13 alt1">
14</div>
<div class="line number15 index14 alt2">
15</div>
<div class="line number16 index15 alt1">
16</div>
<div class="line number17 index16 alt2">
17</div>
<div class="line number18 index17 alt1">
18</div>
<div class="line number19 index18 alt2">
19</div>
<div class="line number20 index19 alt1">
20</div>
<div class="line number21 index20 alt2">
21</div>
<div class="line number22 index21 alt1">
22</div>
<div class="line number23 index22 alt2">
23</div>
<div class="line number24 index23 alt1">
24</div>
<div class="line number25 index24 alt2">
25</div>
<div class="line number26 index25 alt1">
26</div>
<div class="line number27 index26 alt2">
27</div>
<div class="line number28 index27 alt1">
28</div>
<div class="line number29 index28 alt2">
29</div>
<div class="line number30 index29 alt1">
30</div>
<div class="line number31 index30 alt2">
31</div>
<div class="line number32 index31 alt1">
32</div>
<div class="line number33 index32 alt2">
33</div>
<div class="line number34 index33 alt1">
34</div>
<div class="line number35 index34 alt2">
35</div>
<div class="line number36 index35 alt1">
36</div>
<div class="line number37 index36 alt2">
37</div>
<div class="line number38 index37 alt1">
38</div>
<div class="line number39 index38 alt2">
39</div>
<div class="line number40 index39 alt1">
40</div>
<div class="line number41 index40 alt2">
41</div>
<div class="line number42 index41 alt1">
42</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="sql plain">PLAN_TABLE_OUTPUT</code>
</div>
<div class="line number2 index1 alt1">
<code class="sql comments">---------------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number3 index2 alt2">
<code class="sql plain">SQL_ID 04schqc3d9rgm, child number 1</code>
</div>
<div class="line number4 index3 alt1">
<code class="sql comments">-------------------------------------</code>
</div>
<div class="line number5 index4 alt2">
<code class="sql keyword">select</code> <code class="sql plain">l.col06,l.col05,l.col04,r.col27, r.col26,r.col25 </code><code class="sql keyword">from</code> <code class="sql plain">t_local l,</code>
</div>
<div class="line number6 index5 alt1">
<code class="sql plain">t_remote@dblink_remote r </code><code class="sql keyword">where</code> <code class="sql plain">l.col01=r.col01</code>
</div>
<div class="line number7 index6 alt2">
<code class="sql plain">Plan hash value: 830255788</code>
</div>
<div class="line number8 index7 alt1">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number9 index8 alt2">
<code class="sql plain">| Id | Operation | </code><code class="sql keyword">Name</code> <code class="sql plain">| </code><code class="sql keyword">Rows</code> <code class="sql plain">| Bytes | Cost (%CPU)| </code><code class="sql keyword">Time</code> <code class="sql plain">| Inst |</code><code class="sql color1">IN</code><code class="sql plain">-</code><code class="sql keyword">OUT</code><code class="sql plain">|</code>
</div>
<div class="line number10 index9 alt1">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number11 index10 alt2">
<code class="sql plain">| 0 | </code><code class="sql keyword">SELECT</code> <code class="sql plain">STATEMENT | | | | 156 (100)| | | |</code>
</div>
<div class="line number12 index11 alt1">
<code class="sql plain">|* 1 | HASH </code><code class="sql color1">JOIN</code> <code class="sql plain">| | 50 | 6300 | 156 (0)| 00:00:01 | | |</code>
</div>
<div class="line number13 index12 alt2">
<code class="sql plain">| 2 | </code><code class="sql keyword">TABLE</code> <code class="sql plain">ACCESS </code><code class="sql keyword">FULL</code><code class="sql plain">| T_LOCAL | 50 | 3000 | 3 (0)| 00:00:01 | | |</code>
</div>
<div class="line number14 index13 alt1">
<code class="sql plain">| 3 | REMOTE | T_REMOTE | 10000 | 644K| 153 (0)| 00:00:01 | DBLIN~ | R->S |</code>
</div>
<div class="line number15 index14 alt2">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number16 index15 alt1">
<code class="sql plain">Predicate Information (identified </code><code class="sql keyword">by</code> <code class="sql plain">operation id):</code>
</div>
<div class="line number17 index16 alt2">
<code class="sql comments">---------------------------------------------------</code>
</div>
<div class="line number18 index17 alt1">
<code class="sql spaces"> </code><code class="sql plain">1 - access(</code><code class="sql string">"L"</code><code class="sql plain">.</code><code class="sql string">"COL01"</code><code class="sql plain">=</code><code class="sql string">"R"</code><code class="sql plain">.</code><code class="sql string">"COL01"</code><code class="sql plain">)</code>
</div>
<div class="line number19 index18 alt2">
<code class="sql plain">Remote SQL Information (identified </code><code class="sql keyword">by</code> <code class="sql plain">operation id):</code>
</div>
<div class="line number20 index19 alt1">
<code class="sql comments">----------------------------------------------------</code>
</div>
<div class="line number21 index20 alt2">
<code class="sql spaces"> </code><code class="sql plain">3 - </code><code class="sql keyword">SELECT</code> <code class="sql string">"COL01"</code><code class="sql plain">,</code><code class="sql string">"COL25"</code><code class="sql plain">,</code><code class="sql string">"COL26"</code><code class="sql plain">,</code><code class="sql string">"COL27"</code> <code class="sql keyword">FROM</code> <code class="sql string">"T_REMOTE"</code> <code class="sql string">"R"</code> <code class="sql plain">(accessing</code>
</div>
<div class="line number22 index21 alt1">
<code class="sql spaces"> </code><code class="sql string">'DBLINK_REMOTE'</code> <code class="sql plain">)</code>
</div>
<div class="line number23 index22 alt2">
<code class="sql spaces"> </code>
</div>
<div class="line number24 index23 alt1">
<code class="sql plain">28 </code><code class="sql keyword">rows</code> <code class="sql plain">selected.</code>
</div>
<div class="line number25 index24 alt2">
<code class="sql plain">SQL></code>
</div>
<div class="line number26 index25 alt1">
<code class="sql comments">--我们看到,这里已经没有了之前的 WHERE :1="COL01",即使不带入到远程看执行计划,我们也可以猜到它是全表扫。</code>
</div>
<div class="line number27 index26 alt2">
<code class="sql plain">远程:</code>
</div>
<div class="line number28 index27 alt1">
<code class="sql plain">SQL> explain plan </code><code class="sql keyword">for</code>
</div>
<div class="line number29 index28 alt2">
<code class="sql spaces"> </code><code class="sql plain">2 </code><code class="sql keyword">SELECT</code> <code class="sql string">"COL01"</code><code class="sql plain">,</code><code class="sql string">"COL25"</code><code class="sql plain">,</code><code class="sql string">"COL26"</code><code class="sql plain">,</code><code class="sql string">"COL27"</code> <code class="sql keyword">FROM</code> <code class="sql string">"T_REMOTE"</code> <code class="sql string">"R"</code><code class="sql plain">;</code>
</div>
<div class="line number30 index29 alt1">
<code class="sql plain">Explained.</code>
</div>
<div class="line number31 index30 alt2">
<code class="sql plain">SQL> </code><code class="sql keyword">select</code> <code class="sql plain">* </code><code class="sql keyword">from</code> <code class="sql keyword">table</code><code class="sql plain">(dbms_xplan.display());</code>
</div>
<div class="line number32 index31 alt1">
<code class="sql plain">PLAN_TABLE_OUTPUT</code>
</div>
<div class="line number33 index32 alt2">
<code class="sql comments">------------------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number34 index33 alt1">
<code class="sql plain">Plan hash value: 4187688566</code>
</div>
<div class="line number35 index34 alt2">
<code class="sql comments">------------------------------------------------------------------------------</code>
</div>
<div class="line number36 index35 alt1">
<code class="sql plain">| Id | Operation | </code><code class="sql keyword">Name</code> <code class="sql plain">| </code><code class="sql keyword">Rows</code> <code class="sql plain">| Bytes | Cost (%CPU)| </code><code class="sql keyword">Time</code> <code class="sql plain">|</code>
</div>
<div class="line number37 index36 alt2">
<code class="sql comments">------------------------------------------------------------------------------</code>
</div>
<div class="line number38 index37 alt1">
<code class="sql plain">| 0 | </code><code class="sql keyword">SELECT</code> <code class="sql plain">STATEMENT | | 10000 | 615K| 238 (0)| 00:00:01 |</code>
</div>
<div class="line number39 index38 alt2">
<code class="sql plain">| 1 | </code><code class="sql keyword">TABLE</code> <code class="sql plain">ACCESS </code><code class="sql keyword">FULL</code><code class="sql plain">| T_REMOTE | 10000 | 615K| 238 (0)| 00:00:01 |</code>
</div>
<div class="line number40 index39 alt1">
<code class="sql comments">------------------------------------------------------------------------------</code>
</div>
<div class="line number41 index40 alt2">
<code class="sql plain">8 </code><code class="sql keyword">rows</code> <code class="sql plain">selected.</code>
</div>
<div class="line number42 index41 alt1">
<code class="sql plain">SQL></code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
我们可以看到,对于远程表的执行计划,如果关联条件是远程表的第一个字段,第一个字段上的索引是被忽略的,执行计划是选择全表扫描的。</p>
<p>
<span><strong>测试场景2:</strong></span></p>
<div class="jb51code">
<div>
<div class="syntaxhighlightersql" id="highlighter_427648">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
<div class="line number8 index7 alt1">
8</div>
<div class="line number9 index8 alt2">
9</div>
<div class="line number10 index9 alt1">
10</div>
<div class="line number11 index10 alt2">
11</div>
<div class="line number12 index11 alt1">
12</div>
<div class="line number13 index12 alt2">
13</div>
<div class="line number14 index13 alt1">
14</div>
<div class="line number15 index14 alt2">
15</div>
<div class="line number16 index15 alt1">
16</div>
<div class="line number17 index16 alt2">
17</div>
<div class="line number18 index17 alt1">
18</div>
<div class="line number19 index18 alt2">
19</div>
<div class="line number20 index19 alt1">
20</div>
<div class="line number21 index20 alt2">
21</div>
<div class="line number22 index21 alt1">
22</div>
<div class="line number23 index22 alt2">
23</div>
<div class="line number24 index23 alt1">
24</div>
<div class="line number25 index24 alt2">
25</div>
<div class="line number26 index25 alt1">
26</div>
<div class="line number27 index26 alt2">
27</div>
<div class="line number28 index27 alt1">
28</div>
<div class="line number29 index28 alt2">
29</div>
<div class="line number30 index29 alt1">
30</div>
<div class="line number31 index30 alt2">
31</div>
<div class="line number32 index31 alt1">
32</div>
<div class="line number33 index32 alt2">
33</div>
<div class="line number34 index33 alt1">
34</div>
<div class="line number35 index34 alt2">
35</div>
<div class="line number36 index35 alt1">
36</div>
<div class="line number37 index36 alt2">
37</div>
<div class="line number38 index37 alt1">
38</div>
<div class="line number39 index38 alt2">
39</div>
<div class="line number40 index39 alt1">
40</div>
<div class="line number41 index40 alt2">
41</div>
<div class="line number42 index41 alt1">
42</div>
<div class="line number43 index42 alt2">
43</div>
<div class="line number44 index43 alt1">
44</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="sql plain">PLAN_TABLE_OUTPUT</code>
</div>
<div class="line number2 index1 alt1">
<code class="sql comments">---------------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number3 index2 alt2">
<code class="sql plain">SQL_ID 5rwtbwcnv0tsm, child number 1</code>
</div>
<div class="line number4 index3 alt1">
<code class="sql comments">-------------------------------------</code>
</div>
<div class="line number5 index4 alt2">
<code class="sql keyword">select</code> <code class="sql plain">l.col06,l.col05,l.col04,r.col27, r.col26,r.col25 </code><code class="sql keyword">from</code> <code class="sql plain">t_local l,</code>
</div>
<div class="line number6 index5 alt1">
<code class="sql plain">t_remote@dblink_remote r </code><code class="sql keyword">where</code> <code class="sql plain">l.col01=r.col20</code>
</div>
<div class="line number7 index6 alt2">
<code class="sql plain">Plan hash value: 631452043</code>
</div>
<div class="line number8 index7 alt1">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number9 index8 alt2">
<code class="sql plain">| Id | Operation | </code><code class="sql keyword">Name</code> <code class="sql plain">| </code><code class="sql keyword">Rows</code> <code class="sql plain">| Bytes | Cost (%CPU)| </code><code class="sql keyword">Time</code> <code class="sql plain">| Inst |</code><code class="sql color1">IN</code><code class="sql plain">-</code><code class="sql keyword">OUT</code><code class="sql plain">|</code>
</div>
<div class="line number10 index9 alt1">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number11 index10 alt2">
<code class="sql plain">| 0 | </code><code class="sql keyword">SELECT</code> <code class="sql plain">STATEMENT | | | | 103 (100)| | | |</code>
</div>
<div class="line number12 index11 alt1">
<code class="sql plain">| 1 | NESTED LOOPS | | 50 | 6300 | 103 (0)| 00:00:01 | | |</code>
</div>
<div class="line number13 index12 alt2">
<code class="sql plain">| 2 | </code><code class="sql keyword">TABLE</code> <code class="sql plain">ACCESS </code><code class="sql keyword">FULL</code><code class="sql plain">| T_LOCAL | 50 | 3000 | 3 (0)| 00:00:01 | | |</code>
</div>
<div class="line number14 index13 alt1">
<code class="sql plain">| 3 | REMOTE | T_REMOTE | 1 | 66 | 2 (0)| 00:00:01 | DBLIN~ | R->S |</code>
</div>
<div class="line number15 index14 alt2">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number16 index15 alt1">
<code class="sql plain">Remote SQL Information (identified </code><code class="sql keyword">by</code> <code class="sql plain">operation id):</code>
</div>
<div class="line number17 index16 alt2">
<code class="sql comments">----------------------------------------------------</code>
</div>
<div class="line number18 index17 alt1">
<code class="sql spaces"> </code><code class="sql plain">3 - </code><code class="sql keyword">SELECT</code> <code class="sql string">"COL20"</code><code class="sql plain">,</code><code class="sql string">"COL25"</code><code class="sql plain">,</code><code class="sql string">"COL26"</code><code class="sql plain">,</code><code class="sql string">"COL27"</code> <code class="sql keyword">FROM</code> <code class="sql string">"T_REMOTE"</code> <code class="sql string">"R"</code> <code class="sql keyword">WHERE</code> <code class="sql plain">:1=</code><code class="sql string">"COL20"</code>
</div>
<div class="line number19 index18 alt2">
<code class="sql spaces"> </code><code class="sql plain">(accessing </code><code class="sql string">'DBLINK_REMOTE'</code> <code class="sql plain">)</code>
</div>
<div class="line number20 index19 alt1">
<code class="sql spaces"> </code>
</div>
<div class="line number21 index20 alt2">
<code class="sql plain">23 </code><code class="sql keyword">rows</code> <code class="sql plain">selected.</code>
</div>
<div class="line number22 index21 alt1">
<code class="sql plain">SQL> </code>
</div>
<div class="line number23 index22 alt2">
<code class="sql plain">远程:</code>
</div>
<div class="line number24 index23 alt1">
<code class="sql plain">SQL> explain plan </code><code class="sql keyword">for</code>
</div>
<div class="line number25 index24 alt2">
<code class="sql spaces"> </code><code class="sql plain">2 </code><code class="sql keyword">SELECT</code> <code class="sql string">"COL20"</code><code class="sql plain">,</code><code class="sql string">"COL25"</code><code class="sql plain">,</code><code class="sql string">"COL26"</code><code class="sql plain">,</code><code class="sql string">"COL27"</code> <code class="sql keyword">FROM</code> <code class="sql string">"T_REMOTE"</code> <code class="sql string">"R"</code> <code class="sql keyword">WHERE</code> <code class="sql plain">:1=</code><code class="sql string">"COL20"</code><code class="sql plain">;</code>
</div>
<div class="line number26 index25 alt1">
<code class="sql plain">Explained.</code>
</div>
<div class="line number27 index26 alt2">
<code class="sql plain">SQL> </code><code class="sql keyword">select</code> <code class="sql plain">* </code><code class="sql keyword">from</code> <code class="sql keyword">table</code><code class="sql plain">(dbms_xplan.display());</code>
</div>
<div class="line number28 index27 alt1">
<code class="sql plain">PLAN_TABLE_OUTPUT</code>
</div>
<div class="line number29 index28 alt2">
<code class="sql comments">------------------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number30 index29 alt1">
<code class="sql plain">Plan hash value: 3993494813</code>
</div>
<div class="line number31 index30 alt2">
<code class="sql comments">----------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number32 index31 alt1">
<code class="sql plain">| Id | Operation | </code><code class="sql keyword">Name</code> <code class="sql plain">| </code><code class="sql keyword">Rows</code> <code class="sql plain">| Bytes | Cost (%CPU)| </code><code class="sql keyword">Time</code> <code class="sql plain">|</code>
</div>
<div class="line number33 index32 alt2">
<code class="sql comments">----------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number34 index33 alt1">
<code class="sql plain">| 0 | </code><code class="sql keyword">SELECT</code> <code class="sql plain">STATEMENT | | 1 | 63 | 2 (0)| 00:00:01 |</code>
</div>
<div class="line number35 index34 alt2">
<code class="sql plain">| 1 | </code><code class="sql keyword">TABLE</code> <code class="sql plain">ACCESS </code><code class="sql keyword">BY</code> <code class="sql keyword">INDEX</code> <code class="sql plain">ROWID BATCHED| T_REMOTE | 1 | 63 | 2 (0)| 00:00:01 |</code>
</div>
<div class="line number36 index35 alt1">
<code class="sql plain">|* 2 | </code><code class="sql keyword">INDEX</code> <code class="sql plain">RANGE SCAN | T_REMOTE_I20 | 1 | | 1 (0)| 00:00:01 |</code>
</div>
<div class="line number37 index36 alt2">
<code class="sql comments">----------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number38 index37 alt1">
<code class="sql plain">Predicate Information (identified </code><code class="sql keyword">by</code> <code class="sql plain">operation id):</code>
</div>
<div class="line number39 index38 alt2">
<code class="sql plain">PLAN_TABLE_OUTPUT</code>
</div>
<div class="line number40 index39 alt1">
<code class="sql comments">------------------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number41 index40 alt2">
<code class="sql comments">---------------------------------------------------</code>
</div>
<div class="line number42 index41 alt1">
<code class="sql spaces"> </code><code class="sql plain">2 - access(</code><code class="sql string">"COL20"</code><code class="sql plain">=TO_NUMBER(:1))</code>
</div>
<div class="line number43 index42 alt2">
<code class="sql plain">14 </code><code class="sql keyword">rows</code> <code class="sql plain">selected.</code>
</div>
<div class="line number44 index43 alt1">
<code class="sql plain">SQL></code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
我们可以看到,对于远程表的执行计划,如果关联条件是远程表的第20个字段,这第20个字段上的索引是没有被忽略的,执行计划是走索引。</p>
<p>
<span><strong>测试场景3:</strong></span></p>
<div class="jb51code">
<div>
<div class="syntaxhighlightersql" id="highlighter_767421">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
<div class="line number8 index7 alt1">
8</div>
<div class="line number9 index8 alt2">
9</div>
<div class="line number10 index9 alt1">
10</div>
<div class="line number11 index10 alt2">
11</div>
<div class="line number12 index11 alt1">
12</div>
<div class="line number13 index12 alt2">
13</div>
<div class="line number14 index13 alt1">
14</div>
<div class="line number15 index14 alt2">
15</div>
<div class="line number16 index15 alt1">
16</div>
<div class="line number17 index16 alt2">
17</div>
<div class="line number18 index17 alt1">
18</div>
<div class="line number19 index18 alt2">
19</div>
<div class="line number20 index19 alt1">
20</div>
<div class="line number21 index20 alt2">
21</div>
<div class="line number22 index21 alt1">
22</div>
<div class="line number23 index22 alt2">
23</div>
<div class="line number24 index23 alt1">
24</div>
<div class="line number25 index24 alt2">
25</div>
<div class="line number26 index25 alt1">
26</div>
<div class="line number27 index26 alt2">
27</div>
<div class="line number28 index27 alt1">
28</div>
<div class="line number29 index28 alt2">
29</div>
<div class="line number30 index29 alt1">
30</div>
<div class="line number31 index30 alt2">
31</div>
<div class="line number32 index31 alt1">
32</div>
<div class="line number33 index32 alt2">
33</div>
<div class="line number34 index33 alt1">
34</div>
<div class="line number35 index34 alt2">
35</div>
<div class="line number36 index35 alt1">
36</div>
<div class="line number37 index36 alt2">
37</div>
<div class="line number38 index37 alt1">
38</div>
<div class="line number39 index38 alt2">
39</div>
<div class="line number40 index39 alt1">
40</div>
<div class="line number41 index40 alt2">
41</div>
<div class="line number42 index41 alt1">
42</div>
<div class="line number43 index42 alt2">
43</div>
<div class="line number44 index43 alt1">
44</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="sql plain">PLAN_TABLE_OUTPUT</code>
</div>
<div class="line number2 index1 alt1">
<code class="sql comments">---------------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number3 index2 alt2">
<code class="sql plain">SQL_ID 81ctrx5huhfvq, child number 1</code>
</div>
<div class="line number4 index3 alt1">
<code class="sql comments">-------------------------------------</code>
</div>
<div class="line number5 index4 alt2">
<code class="sql keyword">select</code> <code class="sql plain">l.col06,l.col05,l.col04,r.col27, r.col26,r.col25 </code><code class="sql keyword">from</code> <code class="sql plain">t_local l,</code>
</div>
<div class="line number6 index5 alt1">
<code class="sql plain">t_remote@dblink_remote r </code><code class="sql keyword">where</code> <code class="sql plain">l.col02=r.col02</code>
</div>
<div class="line number7 index6 alt2">
<code class="sql plain">Plan hash value: 631452043</code>
</div>
<div class="line number8 index7 alt1">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number9 index8 alt2">
<code class="sql plain">| Id | Operation | </code><code class="sql keyword">Name</code> <code class="sql plain">| </code><code class="sql keyword">Rows</code> <code class="sql plain">| Bytes | Cost (%CPU)| </code><code class="sql keyword">Time</code> <code class="sql plain">| Inst |</code><code class="sql color1">IN</code><code class="sql plain">-</code><code class="sql keyword">OUT</code><code class="sql plain">|</code>
</div>
<div class="line number10 index9 alt1">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number11 index10 alt2">
<code class="sql plain">| 0 | </code><code class="sql keyword">SELECT</code> <code class="sql plain">STATEMENT | | | | 103 (100)| | | |</code>
</div>
<div class="line number12 index11 alt1">
<code class="sql plain">| 1 | NESTED LOOPS | | 50 | 6300 | 103 (0)| 00:00:01 | | |</code>
</div>
<div class="line number13 index12 alt2">
<code class="sql plain">| 2 | </code><code class="sql keyword">TABLE</code> <code class="sql plain">ACCESS </code><code class="sql keyword">FULL</code><code class="sql plain">| T_LOCAL | 50 | 3000 | 3 (0)| 00:00:01 | | |</code>
</div>
<div class="line number14 index13 alt1">
<code class="sql plain">| 3 | REMOTE | T_REMOTE | 1 | 66 | 2 (0)| 00:00:01 | DBLIN~ | R->S |</code>
</div>
<div class="line number15 index14 alt2">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number16 index15 alt1">
<code class="sql plain">Remote SQL Information (identified </code><code class="sql keyword">by</code> <code class="sql plain">operation id):</code>
</div>
<div class="line number17 index16 alt2">
<code class="sql comments">----------------------------------------------------</code>
</div>
<div class="line number18 index17 alt1">
<code class="sql spaces"> </code><code class="sql plain">3 - </code><code class="sql keyword">SELECT</code> <code class="sql string">"COL02"</code><code class="sql plain">,</code><code class="sql string">"COL25"</code><code class="sql plain">,</code><code class="sql string">"COL26"</code><code class="sql plain">,</code><code class="sql string">"COL27"</code> <code class="sql keyword">FROM</code> <code class="sql string">"T_REMOTE"</code> <code class="sql string">"R"</code> <code class="sql keyword">WHERE</code> <code class="sql plain">:1=</code><code class="sql string">"COL02"</code>
</div>
<div class="line number19 index18 alt2">
<code class="sql spaces"> </code><code class="sql plain">(accessing </code><code class="sql string">'DBLINK_REMOTE'</code> <code class="sql plain">)</code>
</div>
<div class="line number20 index19 alt1">
<code class="sql spaces"> </code>
</div>
<div class="line number21 index20 alt2">
<code class="sql plain">23 </code><code class="sql keyword">rows</code> <code class="sql plain">selected.</code>
</div>
<div class="line number22 index21 alt1">
<code class="sql plain">SQL> </code>
</div>
<div class="line number23 index22 alt2">
<code class="sql plain">远程:</code>
</div>
<div class="line number24 index23 alt1">
<code class="sql plain">SQL> explain plan </code><code class="sql keyword">for</code>
</div>
<div class="line number25 index24 alt2">
<code class="sql spaces"> </code><code class="sql plain">2 </code><code class="sql keyword">SELECT</code> <code class="sql string">"COL02"</code><code class="sql plain">,</code><code class="sql string">"COL25"</code><code class="sql plain">,</code><code class="sql string">"COL26"</code><code class="sql plain">,</code><code class="sql string">"COL27"</code> <code class="sql keyword">FROM</code> <code class="sql string">"T_REMOTE"</code> <code class="sql string">"R"</code> <code class="sql keyword">WHERE</code> <code class="sql plain">:1=</code><code class="sql string">"COL02"</code><code class="sql plain">;</code>
</div>
<div class="line number26 index25 alt1">
<code class="sql plain">Explained.</code>
</div>
<div class="line number27 index26 alt2">
<code class="sql plain">SQL> </code><code class="sql keyword">select</code> <code class="sql plain">* </code><code class="sql keyword">from</code> <code class="sql keyword">table</code><code class="sql plain">(dbms_xplan.display());</code>
</div>
<div class="line number28 index27 alt1">
<code class="sql plain">PLAN_TABLE_OUTPUT</code>
</div>
<div class="line number29 index28 alt2">
<code class="sql comments">------------------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number30 index29 alt1">
<code class="sql plain">Plan hash value: 2505594687</code>
</div>
<div class="line number31 index30 alt2">
<code class="sql comments">----------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number32 index31 alt1">
<code class="sql plain">| Id | Operation | </code><code class="sql keyword">Name</code> <code class="sql plain">| </code><code class="sql keyword">Rows</code> <code class="sql plain">| Bytes | Cost (%CPU)| </code><code class="sql keyword">Time</code> <code class="sql plain">|</code>
</div>
<div class="line number33 index32 alt2">
<code class="sql comments">----------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number34 index33 alt1">
<code class="sql plain">| 0 | </code><code class="sql keyword">SELECT</code> <code class="sql plain">STATEMENT | | 1 | 63 | 2 (0)| 00:00:01 |</code>
</div>
<div class="line number35 index34 alt2">
<code class="sql plain">| 1 | </code><code class="sql keyword">TABLE</code> <code class="sql plain">ACCESS </code><code class="sql keyword">BY</code> <code class="sql keyword">INDEX</code> <code class="sql plain">ROWID BATCHED| T_REMOTE | 1 | 63 | 2 (0)| 00:00:01 |</code>
</div>
<div class="line number36 index35 alt1">
<code class="sql plain">|* 2 | </code><code class="sql keyword">INDEX</code> <code class="sql plain">RANGE SCAN | T_REMOTE_I02 | 1 | | 1 (0)| 00:00:01 |</code>
</div>
<div class="line number37 index36 alt2">
<code class="sql comments">----------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number38 index37 alt1">
<code class="sql plain">Predicate Information (identified </code><code class="sql keyword">by</code> <code class="sql plain">operation id):</code>
</div>
<div class="line number39 index38 alt2">
<code class="sql plain">PLAN_TABLE_OUTPUT</code>
</div>
<div class="line number40 index39 alt1">
<code class="sql comments">------------------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number41 index40 alt2">
<code class="sql comments">---------------------------------------------------</code>
</div>
<div class="line number42 index41 alt1">
<code class="sql spaces"> </code><code class="sql plain">2 - access(</code><code class="sql string">"COL02"</code><code class="sql plain">=TO_NUMBER(:1))</code>
</div>
<div class="line number43 index42 alt2">
<code class="sql plain">14 </code><code class="sql keyword">rows</code> <code class="sql plain">selected.</code>
</div>
<div class="line number44 index43 alt1">
<code class="sql plain">SQL></code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
我们可以看到,对于远程表的执行计划,如果关联条件是远程表的第2个字段,这第2个字段上的索引是没有被忽略的,执行计划是走索引。</p>
<p>
<span><strong>测试场景4:</strong></span></p>
<div class="jb51code">
<div>
<div class="syntaxhighlightersql" id="highlighter_45350">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
<div class="line number8 index7 alt1">
8</div>
<div class="line number9 index8 alt2">
9</div>
<div class="line number10 index9 alt1">
10</div>
<div class="line number11 index10 alt2">
11</div>
<div class="line number12 index11 alt1">
12</div>
<div class="line number13 index12 alt2">
13</div>
<div class="line number14 index13 alt1">
14</div>
<div class="line number15 index14 alt2">
15</div>
<div class="line number16 index15 alt1">
16</div>
<div class="line number17 index16 alt2">
17</div>
<div class="line number18 index17 alt1">
18</div>
<div class="line number19 index18 alt2">
19</div>
<div class="line number20 index19 alt1">
20</div>
<div class="line number21 index20 alt2">
21</div>
<div class="line number22 index21 alt1">
22</div>
<div class="line number23 index22 alt2">
23</div>
<div class="line number24 index23 alt1">
24</div>
<div class="line number25 index24 alt2">
25</div>
<div class="line number26 index25 alt1">
26</div>
<div class="line number27 index26 alt2">
27</div>
<div class="line number28 index27 alt1">
28</div>
<div class="line number29 index28 alt2">
29</div>
<div class="line number30 index29 alt1">
30</div>
<div class="line number31 index30 alt2">
31</div>
<div class="line number32 index31 alt1">
32</div>
<div class="line number33 index32 alt2">
33</div>
<div class="line number34 index33 alt1">
34</div>
<div class="line number35 index34 alt2">
35</div>
<div class="line number36 index35 alt1">
36</div>
<div class="line number37 index36 alt2">
37</div>
<div class="line number38 index37 alt1">
38</div>
<div class="line number39 index38 alt2">
39</div>
<div class="line number40 index39 alt1">
40</div>
<div class="line number41 index40 alt2">
41</div>
<div class="line number42 index41 alt1">
42</div>
<div class="line number43 index42 alt2">
43</div>
<div class="line number44 index43 alt1">
44</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="sql plain">PLAN_TABLE_OUTPUT</code>
</div>
<div class="line number2 index1 alt1">
<code class="sql comments">---------------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number3 index2 alt2">
<code class="sql plain">SQL_ID 407pxjh9mgbry, child number 1</code>
</div>
<div class="line number4 index3 alt1">
<code class="sql comments">-------------------------------------</code>
</div>
<div class="line number5 index4 alt2">
<code class="sql keyword">select</code> <code class="sql plain">l.col06,l.col05,l.col04,r.col27, r.col26,r.col25 </code><code class="sql keyword">from</code> <code class="sql plain">t_local l,</code>
</div>
<div class="line number6 index5 alt1">
<code class="sql plain">t_remote@dblink_remote r </code><code class="sql keyword">where</code> <code class="sql plain">l.col02=r.col20</code>
</div>
<div class="line number7 index6 alt2">
<code class="sql plain">Plan hash value: 631452043</code>
</div>
<div class="line number8 index7 alt1">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number9 index8 alt2">
<code class="sql plain">| Id | Operation | </code><code class="sql keyword">Name</code> <code class="sql plain">| </code><code class="sql keyword">Rows</code> <code class="sql plain">| Bytes | Cost (%CPU)| </code><code class="sql keyword">Time</code> <code class="sql plain">| Inst |</code><code class="sql color1">IN</code><code class="sql plain">-</code><code class="sql keyword">OUT</code><code class="sql plain">|</code>
</div>
<div class="line number10 index9 alt1">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number11 index10 alt2">
<code class="sql plain">| 0 | </code><code class="sql keyword">SELECT</code> <code class="sql plain">STATEMENT | | | | 103 (100)| | | |</code>
</div>
<div class="line number12 index11 alt1">
<code class="sql plain">| 1 | NESTED LOOPS | | 50 | 6300 | 103 (0)| 00:00:01 | | |</code>
</div>
<div class="line number13 index12 alt2">
<code class="sql plain">| 2 | </code><code class="sql keyword">TABLE</code> <code class="sql plain">ACCESS </code><code class="sql keyword">FULL</code><code class="sql plain">| T_LOCAL | 50 | 3000 | 3 (0)| 00:00:01 | | |</code>
</div>
<div class="line number14 index13 alt1">
<code class="sql plain">| 3 | REMOTE | T_REMOTE | 1 | 66 | 2 (0)| 00:00:01 | DBLIN~ | R->S |</code>
</div>
<div class="line number15 index14 alt2">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number16 index15 alt1">
<code class="sql plain">Remote SQL Information (identified </code><code class="sql keyword">by</code> <code class="sql plain">operation id):</code>
</div>
<div class="line number17 index16 alt2">
<code class="sql comments">----------------------------------------------------</code>
</div>
<div class="line number18 index17 alt1">
<code class="sql spaces"> </code><code class="sql plain">3 - </code><code class="sql keyword">SELECT</code> <code class="sql string">"COL20"</code><code class="sql plain">,</code><code class="sql string">"COL25"</code><code class="sql plain">,</code><code class="sql string">"COL26"</code><code class="sql plain">,</code><code class="sql string">"COL27"</code> <code class="sql keyword">FROM</code> <code class="sql string">"T_REMOTE"</code> <code class="sql string">"R"</code> <code class="sql keyword">WHERE</code> <code class="sql plain">:1=</code><code class="sql string">"COL20"</code>
</div>
<div class="line number19 index18 alt2">
<code class="sql spaces"> </code><code class="sql plain">(accessing </code><code class="sql string">'DBLINK_REMOTE'</code> <code class="sql plain">)</code>
</div>
<div class="line number20 index19 alt1">
<code class="sql spaces"> </code>
</div>
<div class="line number21 index20 alt2">
<code class="sql plain">23 </code><code class="sql keyword">rows</code> <code class="sql plain">selected.</code>
</div>
<div class="line number22 index21 alt1">
<code class="sql plain">SQL> </code>
</div>
<div class="line number23 index22 alt2">
<code class="sql plain">远程:</code>
</div>
<div class="line number24 index23 alt1">
<code class="sql plain">SQL> explain plan </code><code class="sql keyword">for</code>
</div>
<div class="line number25 index24 alt2">
<code class="sql spaces"> </code><code class="sql plain">2 </code><code class="sql keyword">SELECT</code> <code class="sql string">"COL20"</code><code class="sql plain">,</code><code class="sql string">"COL25"</code><code class="sql plain">,</code><code class="sql string">"COL26"</code><code class="sql plain">,</code><code class="sql string">"COL27"</code> <code class="sql keyword">FROM</code> <code class="sql string">"T_REMOTE"</code> <code class="sql string">"R"</code> <code class="sql keyword">WHERE</code> <code class="sql plain">:1=</code><code class="sql string">"COL20"</code><code class="sql plain">;</code>
</div>
<div class="line number26 index25 alt1">
<code class="sql plain">Explained.</code>
</div>
<div class="line number27 index26 alt2">
<code class="sql plain">SQL> </code><code class="sql keyword">select</code> <code class="sql plain">* </code><code class="sql keyword">from</code> <code class="sql keyword">table</code><code class="sql plain">(dbms_xplan.display());</code>
</div>
<div class="line number28 index27 alt1">
<code class="sql plain">PLAN_TABLE_OUTPUT</code>
</div>
<div class="line number29 index28 alt2">
<code class="sql comments">------------------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number30 index29 alt1">
<code class="sql plain">Plan hash value: 3993494813</code>
</div>
<div class="line number31 index30 alt2">
<code class="sql comments">----------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number32 index31 alt1">
<code class="sql plain">| Id | Operation | </code><code class="sql keyword">Name</code> <code class="sql plain">| </code><code class="sql keyword">Rows</code> <code class="sql plain">| Bytes | Cost (%CPU)| </code><code class="sql keyword">Time</code> <code class="sql plain">|</code>
</div>
<div class="line number33 index32 alt2">
<code class="sql comments">----------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number34 index33 alt1">
<code class="sql plain">| 0 | </code><code class="sql keyword">SELECT</code> <code class="sql plain">STATEMENT | | 1 | 63 | 2 (0)| 00:00:01 |</code>
</div>
<div class="line number35 index34 alt2">
<code class="sql plain">| 1 | </code><code class="sql keyword">TABLE</code> <code class="sql plain">ACCESS </code><code class="sql keyword">BY</code> <code class="sql keyword">INDEX</code> <code class="sql plain">ROWID BATCHED| T_REMOTE | 1 | 63 | 2 (0)| 00:00:01 |</code>
</div>
<div class="line number36 index35 alt1">
<code class="sql plain">|* 2 | </code><code class="sql keyword">INDEX</code> <code class="sql plain">RANGE SCAN | T_REMOTE_I20 | 1 | | 1 (0)| 00:00:01 |</code>
</div>
<div class="line number37 index36 alt2">
<code class="sql comments">----------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number38 index37 alt1">
<code class="sql plain">Predicate Information (identified </code><code class="sql keyword">by</code> <code class="sql plain">operation id):</code>
</div>
<div class="line number39 index38 alt2">
<code class="sql plain">PLAN_TABLE_OUTPUT</code>
</div>
<div class="line number40 index39 alt1">
<code class="sql comments">------------------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number41 index40 alt2">
<code class="sql comments">---------------------------------------------------</code>
</div>
<div class="line number42 index41 alt1">
<code class="sql spaces"> </code><code class="sql plain">2 - access(</code><code class="sql string">"COL20"</code><code class="sql plain">=TO_NUMBER(:1))</code>
</div>
<div class="line number43 index42 alt2">
<code class="sql plain">14 </code><code class="sql keyword">rows</code> <code class="sql plain">selected.</code>
</div>
<div class="line number44 index43 alt1">
<code class="sql plain">SQL></code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
我们可以看到,对于远程表的执行计划,如果关联条件是远程表的第20个字段,这第20个字段上的索引是没有被忽略的,执行计划是走索引。</p>
<p>
我们目前可以总结到,当远程表第21个索引建立的时候,通过dblink关联本地表和远程表,如果关联条件是远程表的第1个建立的索引的字段,那么这个索引将被忽略,从而走全表扫描。如果关联条件是远程表的第2个建立索引的字段,则不受影响。</p>
<p>
似乎是有效索引的窗口是20个,当新建第21个,那么第1个就被无视了。</p>
<p>
<span><span><strong>(五)建立第22个索引,我们在来看看上述猜测是否符合。</strong></span></span></p>
<div class="jb51code">
<div>
<div class="syntaxhighlightersql" id="highlighter_962881">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="sql keyword">create</code> <code class="sql keyword">index</code> <code class="sql plain">t_remote_i22 </code><code class="sql keyword">on</code> <code class="sql plain">t_remote (col22);</code>
</div>
<div class="line number2 index1 alt1">
<code class="sql keyword">exec</code> <code class="sql plain">dbms_stats.gather_table_stats(</code><code class="sql color2">user</code><code class="sql plain">,</code><code class="sql string">'T_REMOTE'</code><code class="sql plain">);</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
<span><span><strong>(六),目前远程表有22个索引,重复上面4个测试:</strong></span></span></p>
<p>
<span><strong>测试场景1:</strong></span></p>
<div class="jb51code">
<div>
<div class="syntaxhighlightersql" id="highlighter_739682">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
<div class="line number8 index7 alt1">
8</div>
<div class="line number9 index8 alt2">
9</div>
<div class="line number10 index9 alt1">
10</div>
<div class="line number11 index10 alt2">
11</div>
<div class="line number12 index11 alt1">
12</div>
<div class="line number13 index12 alt2">
13</div>
<div class="line number14 index13 alt1">
14</div>
<div class="line number15 index14 alt2">
15</div>
<div class="line number16 index15 alt1">
16</div>
<div class="line number17 index16 alt2">
17</div>
<div class="line number18 index17 alt1">
18</div>
<div class="line number19 index18 alt2">
19</div>
<div class="line number20 index19 alt1">
20</div>
<div class="line number21 index20 alt2">
21</div>
<div class="line number22 index21 alt1">
22</div>
<div class="line number23 index22 alt2">
23</div>
<div class="line number24 index23 alt1">
24</div>
<div class="line number25 index24 alt2">
25</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="sql plain">PLAN_TABLE_OUTPUT</code>
</div>
<div class="line number2 index1 alt1">
<code class="sql comments">---------------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number3 index2 alt2">
<code class="sql plain">SQL_ID 04schqc3d9rgm, child number 2</code>
</div>
<div class="line number4 index3 alt1">
<code class="sql comments">-------------------------------------</code>
</div>
<div class="line number5 index4 alt2">
<code class="sql keyword">select</code> <code class="sql plain">l.col06,l.col05,l.col04,r.col27, r.col26,r.col25 </code><code class="sql keyword">from</code> <code class="sql plain">t_local l,</code>
</div>
<div class="line number6 index5 alt1">
<code class="sql plain">t_remote@dblink_remote r </code><code class="sql keyword">where</code> <code class="sql plain">l.col01=r.col01</code>
</div>
<div class="line number7 index6 alt2">
<code class="sql plain">Plan hash value: 830255788</code>
</div>
<div class="line number8 index7 alt1">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number9 index8 alt2">
<code class="sql plain">| Id | Operation | </code><code class="sql keyword">Name</code> <code class="sql plain">| </code><code class="sql keyword">Rows</code> <code class="sql plain">| Bytes | Cost (%CPU)| </code><code class="sql keyword">Time</code> <code class="sql plain">| Inst |</code><code class="sql color1">IN</code><code class="sql plain">-</code><code class="sql keyword">OUT</code><code class="sql plain">|</code>
</div>
<div class="line number10 index9 alt1">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number11 index10 alt2">
<code class="sql plain">| 0 | </code><code class="sql keyword">SELECT</code> <code class="sql plain">STATEMENT | | | | 156 (100)| | | |</code>
</div>
<div class="line number12 index11 alt1">
<code class="sql plain">|* 1 | HASH </code><code class="sql color1">JOIN</code> <code class="sql plain">| | 50 | 6300 | 156 (0)| 00:00:01 | | |</code>
</div>
<div class="line number13 index12 alt2">
<code class="sql plain">| 2 | </code><code class="sql keyword">TABLE</code> <code class="sql plain">ACCESS </code><code class="sql keyword">FULL</code><code class="sql plain">| T_LOCAL | 50 | 3000 | 3 (0)| 00:00:01 | | |</code>
</div>
<div class="line number14 index13 alt1">
<code class="sql plain">| 3 | REMOTE | T_REMOTE | 10000 | 644K| 153 (0)| 00:00:01 | DBLIN~ | R->S |</code>
</div>
<div class="line number15 index14 alt2">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number16 index15 alt1">
<code class="sql plain">Predicate Information (identified </code><code class="sql keyword">by</code> <code class="sql plain">operation id):</code>
</div>
<div class="line number17 index16 alt2">
<code class="sql comments">---------------------------------------------------</code>
</div>
<div class="line number18 index17 alt1">
<code class="sql spaces"> </code><code class="sql plain">1 - access(</code><code class="sql string">"L"</code><code class="sql plain">.</code><code class="sql string">"COL01"</code><code class="sql plain">=</code><code class="sql string">"R"</code><code class="sql plain">.</code><code class="sql string">"COL01"</code><code class="sql plain">)</code>
</div>
<div class="line number19 index18 alt2">
<code class="sql plain">Remote SQL Information (identified </code><code class="sql keyword">by</code> <code class="sql plain">operation id):</code>
</div>
<div class="line number20 index19 alt1">
<code class="sql comments">----------------------------------------------------</code>
</div>
<div class="line number21 index20 alt2">
<code class="sql spaces"> </code><code class="sql plain">3 - </code><code class="sql keyword">SELECT</code> <code class="sql string">"COL01"</code><code class="sql plain">,</code><code class="sql string">"COL25"</code><code class="sql plain">,</code><code class="sql string">"COL26"</code><code class="sql plain">,</code><code class="sql string">"COL27"</code> <code class="sql keyword">FROM</code> <code class="sql string">"T_REMOTE"</code> <code class="sql string">"R"</code> <code class="sql plain">(accessing</code>
</div>
<div class="line number22 index21 alt1">
<code class="sql spaces"> </code><code class="sql string">'DBLINK_REMOTE'</code> <code class="sql plain">)</code>
</div>
<div class="line number23 index22 alt2">
<code class="sql spaces"> </code>
</div>
<div class="line number24 index23 alt1">
<code class="sql plain">28 </code><code class="sql keyword">rows</code> <code class="sql plain">selected.</code>
</div>
<div class="line number25 index24 alt2">
<code class="sql plain">SQL></code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
<span><strong>测试场景2:</strong></span></p>
<div class="jb51code">
<div>
<div class="syntaxhighlightersql" id="highlighter_261004">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
<div class="line number8 index7 alt1">
8</div>
<div class="line number9 index8 alt2">
9</div>
<div class="line number10 index9 alt1">
10</div>
<div class="line number11 index10 alt2">
11</div>
<div class="line number12 index11 alt1">
12</div>
<div class="line number13 index12 alt2">
13</div>
<div class="line number14 index13 alt1">
14</div>
<div class="line number15 index14 alt2">
15</div>
<div class="line number16 index15 alt1">
16</div>
<div class="line number17 index16 alt2">
17</div>
<div class="line number18 index17 alt1">
18</div>
<div class="line number19 index18 alt2">
19</div>
<div class="line number20 index19 alt1">
20</div>
<div class="line number21 index20 alt2">
21</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="sql plain">PLAN_TABLE_OUTPUT</code>
</div>
<div class="line number2 index1 alt1">
<code class="sql comments">---------------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number3 index2 alt2">
<code class="sql plain">SQL_ID 5rwtbwcnv0tsm, child number 2</code>
</div>
<div class="line number4 index3 alt1">
<code class="sql comments">-------------------------------------</code>
</div>
<div class="line number5 index4 alt2">
<code class="sql keyword">select</code> <code class="sql plain">l.col06,l.col05,l.col04,r.col27, r.col26,r.col25 </code><code class="sql keyword">from</code> <code class="sql plain">t_local l,</code>
</div>
<div class="line number6 index5 alt1">
<code class="sql plain">t_remote@dblink_remote r </code><code class="sql keyword">where</code> <code class="sql plain">l.col01=r.col20</code>
</div>
<div class="line number7 index6 alt2">
<code class="sql plain">Plan hash value: 631452043</code>
</div>
<div class="line number8 index7 alt1">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number9 index8 alt2">
<code class="sql plain">| Id | Operation | </code><code class="sql keyword">Name</code> <code class="sql plain">| </code><code class="sql keyword">Rows</code> <code class="sql plain">| Bytes | Cost (%CPU)| </code><code class="sql keyword">Time</code> <code class="sql plain">| Inst |</code><code class="sql color1">IN</code><code class="sql plain">-</code><code class="sql keyword">OUT</code><code class="sql plain">|</code>
</div>
<div class="line number10 index9 alt1">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number11 index10 alt2">
<code class="sql plain">| 0 | </code><code class="sql keyword">SELECT</code> <code class="sql plain">STATEMENT | | | | 103 (100)| | | |</code>
</div>
<div class="line number12 index11 alt1">
<code class="sql plain">| 1 | NESTED LOOPS | | 50 | 6300 | 103 (0)| 00:00:01 | | |</code>
</div>
<div class="line number13 index12 alt2">
<code class="sql plain">| 2 | </code><code class="sql keyword">TABLE</code> <code class="sql plain">ACCESS </code><code class="sql keyword">FULL</code><code class="sql plain">| T_LOCAL | 50 | 3000 | 3 (0)| 00:00:01 | | |</code>
</div>
<div class="line number14 index13 alt1">
<code class="sql plain">| 3 | REMOTE | T_REMOTE | 1 | 66 | 2 (0)| 00:00:01 | DBLIN~ | R->S |</code>
</div>
<div class="line number15 index14 alt2">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number16 index15 alt1">
<code class="sql plain">Remote SQL Information (identified </code><code class="sql keyword">by</code> <code class="sql plain">operation id):</code>
</div>
<div class="line number17 index16 alt2">
<code class="sql comments">----------------------------------------------------</code>
</div>
<div class="line number18 index17 alt1">
<code class="sql spaces"> </code><code class="sql plain">3 - </code><code class="sql keyword">SELECT</code> <code class="sql string">"COL20"</code><code class="sql plain">,</code><code class="sql string">"COL25"</code><code class="sql plain">,</code><code class="sql string">"COL26"</code><code class="sql plain">,</code><code class="sql string">"COL27"</code> <code class="sql keyword">FROM</code> <code class="sql string">"T_REMOTE"</code> <code class="sql string">"R"</code> <code class="sql keyword">WHERE</code> <code class="sql plain">:1=</code><code class="sql string">"COL20"</code>
</div>
<div class="line number19 index18 alt2">
<code class="sql spaces"> </code><code class="sql plain">(accessing </code><code class="sql string">'DBLINK_REMOTE'</code> <code class="sql plain">)</code>
</div>
<div class="line number20 index19 alt1">
<code class="sql plain">23 </code><code class="sql keyword">rows</code> <code class="sql plain">selected.</code>
</div>
<div class="line number21 index20 alt2">
<code class="sql plain">SQL></code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
<span><strong>测试场景3:</strong></span></p>
<div class="jb51code">
<div>
<div class="syntaxhighlightersql" id="highlighter_28284">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
<div class="line number8 index7 alt1">
8</div>
<div class="line number9 index8 alt2">
9</div>
<div class="line number10 index9 alt1">
10</div>
<div class="line number11 index10 alt2">
11</div>
<div class="line number12 index11 alt1">
12</div>
<div class="line number13 index12 alt2">
13</div>
<div class="line number14 index13 alt1">
14</div>
<div class="line number15 index14 alt2">
15</div>
<div class="line number16 index15 alt1">
16</div>
<div class="line number17 index16 alt2">
17</div>
<div class="line number18 index17 alt1">
18</div>
<div class="line number19 index18 alt2">
19</div>
<div class="line number20 index19 alt1">
20</div>
<div class="line number21 index20 alt2">
21</div>
<div class="line number22 index21 alt1">
22</div>
<div class="line number23 index22 alt2">
23</div>
<div class="line number24 index23 alt1">
24</div>
<div class="line number25 index24 alt2">
25</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="sql plain">PLAN_TABLE_OUTPUT</code>
</div>
<div class="line number2 index1 alt1">
<code class="sql comments">---------------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number3 index2 alt2">
<code class="sql plain">SQL_ID 81ctrx5huhfvq, child number 2</code>
</div>
<div class="line number4 index3 alt1">
<code class="sql comments">-------------------------------------</code>
</div>
<div class="line number5 index4 alt2">
<code class="sql keyword">select</code> <code class="sql plain">l.col06,l.col05,l.col04,r.col27, r.col26,r.col25 </code><code class="sql keyword">from</code> <code class="sql plain">t_local l,</code>
</div>
<div class="line number6 index5 alt1">
<code class="sql plain">t_remote@dblink_remote r </code><code class="sql keyword">where</code> <code class="sql plain">l.col02=r.col02</code>
</div>
<div class="line number7 index6 alt2">
<code class="sql plain">Plan hash value: 830255788</code>
</div>
<div class="line number8 index7 alt1">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number9 index8 alt2">
<code class="sql plain">| Id | Operation | </code><code class="sql keyword">Name</code> <code class="sql plain">| </code><code class="sql keyword">Rows</code> <code class="sql plain">| Bytes | Cost (%CPU)| </code><code class="sql keyword">Time</code> <code class="sql plain">| Inst |</code><code class="sql color1">IN</code><code class="sql plain">-</code><code class="sql keyword">OUT</code><code class="sql plain">|</code>
</div>
<div class="line number10 index9 alt1">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number11 index10 alt2">
<code class="sql plain">| 0 | </code><code class="sql keyword">SELECT</code> <code class="sql plain">STATEMENT | | | | 156 (100)| | | |</code>
</div>
<div class="line number12 index11 alt1">
<code class="sql plain">|* 1 | HASH </code><code class="sql color1">JOIN</code> <code class="sql plain">| | 50 | 6300 | 156 (0)| 00:00:01 | | |</code>
</div>
<div class="line number13 index12 alt2">
<code class="sql plain">| 2 | </code><code class="sql keyword">TABLE</code> <code class="sql plain">ACCESS </code><code class="sql keyword">FULL</code><code class="sql plain">| T_LOCAL | 50 | 3000 | 3 (0)| 00:00:01 | | |</code>
</div>
<div class="line number14 index13 alt1">
<code class="sql plain">| 3 | REMOTE | T_REMOTE | 10000 | 644K| 153 (0)| 00:00:01 | DBLIN~ | R->S |</code>
</div>
<div class="line number15 index14 alt2">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number16 index15 alt1">
<code class="sql plain">Predicate Information (identified </code><code class="sql keyword">by</code> <code class="sql plain">operation id):</code>
</div>
<div class="line number17 index16 alt2">
<code class="sql comments">---------------------------------------------------</code>
</div>
<div class="line number18 index17 alt1">
<code class="sql spaces"> </code><code class="sql plain">1 - access(</code><code class="sql string">"L"</code><code class="sql plain">.</code><code class="sql string">"COL02"</code><code class="sql plain">=</code><code class="sql string">"R"</code><code class="sql plain">.</code><code class="sql string">"COL02"</code><code class="sql plain">)</code>
</div>
<div class="line number19 index18 alt2">
<code class="sql plain">Remote SQL Information (identified </code><code class="sql keyword">by</code> <code class="sql plain">operation id):</code>
</div>
<div class="line number20 index19 alt1">
<code class="sql comments">----------------------------------------------------</code>
</div>
<div class="line number21 index20 alt2">
<code class="sql spaces"> </code><code class="sql plain">3 - </code><code class="sql keyword">SELECT</code> <code class="sql string">"COL02"</code><code class="sql plain">,</code><code class="sql string">"COL25"</code><code class="sql plain">,</code><code class="sql string">"COL26"</code><code class="sql plain">,</code><code class="sql string">"COL27"</code> <code class="sql keyword">FROM</code> <code class="sql string">"T_REMOTE"</code> <code class="sql string">"R"</code> <code class="sql plain">(accessing</code>
</div>
<div class="line number22 index21 alt1">
<code class="sql spaces"> </code><code class="sql string">'DBLINK_REMOTE'</code> <code class="sql plain">)</code>
</div>
<div class="line number23 index22 alt2">
<code class="sql spaces"> </code>
</div>
<div class="line number24 index23 alt1">
<code class="sql plain">28 </code><code class="sql keyword">rows</code> <code class="sql plain">selected.</code>
</div>
<div class="line number25 index24 alt2">
<code class="sql plain">SQL></code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
<span><strong>测试场景4:</strong></span></p>
<div class="jb51code">
<div>
<div class="syntaxhighlightersql" id="highlighter_522738">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
<div class="line number8 index7 alt1">
8</div>
<div class="line number9 index8 alt2">
9</div>
<div class="line number10 index9 alt1">
10</div>
<div class="line number11 index10 alt2">
11</div>
<div class="line number12 index11 alt1">
12</div>
<div class="line number13 index12 alt2">
13</div>
<div class="line number14 index13 alt1">
14</div>
<div class="line number15 index14 alt2">
15</div>
<div class="line number16 index15 alt1">
16</div>
<div class="line number17 index16 alt2">
17</div>
<div class="line number18 index17 alt1">
18</div>
<div class="line number19 index18 alt2">
19</div>
<div class="line number20 index19 alt1">
20</div>
<div class="line number21 index20 alt2">
21</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="sql plain">PLAN_TABLE_OUTPUT</code>
</div>
<div class="line number2 index1 alt1">
<code class="sql comments">---------------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number3 index2 alt2">
<code class="sql plain">SQL_ID 407pxjh9mgbry, child number 2</code>
</div>
<div class="line number4 index3 alt1">
<code class="sql comments">-------------------------------------</code>
</div>
<div class="line number5 index4 alt2">
<code class="sql keyword">select</code> <code class="sql plain">l.col06,l.col05,l.col04,r.col27, r.col26,r.col25 </code><code class="sql keyword">from</code> <code class="sql plain">t_local l,</code>
</div>
<div class="line number6 index5 alt1">
<code class="sql plain">t_remote@dblink_remote r </code><code class="sql keyword">where</code> <code class="sql plain">l.col02=r.col20</code>
</div>
<div class="line number7 index6 alt2">
<code class="sql plain">Plan hash value: 631452043</code>
</div>
<div class="line number8 index7 alt1">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number9 index8 alt2">
<code class="sql plain">| Id | Operation | </code><code class="sql keyword">Name</code> <code class="sql plain">| </code><code class="sql keyword">Rows</code> <code class="sql plain">| Bytes | Cost (%CPU)| </code><code class="sql keyword">Time</code> <code class="sql plain">| Inst |</code><code class="sql color1">IN</code><code class="sql plain">-</code><code class="sql keyword">OUT</code><code class="sql plain">|</code>
</div>
<div class="line number10 index9 alt1">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number11 index10 alt2">
<code class="sql plain">| 0 | </code><code class="sql keyword">SELECT</code> <code class="sql plain">STATEMENT | | | | 103 (100)| | | |</code>
</div>
<div class="line number12 index11 alt1">
<code class="sql plain">| 1 | NESTED LOOPS | | 50 | 6300 | 103 (0)| 00:00:01 | | |</code>
</div>
<div class="line number13 index12 alt2">
<code class="sql plain">| 2 | </code><code class="sql keyword">TABLE</code> <code class="sql plain">ACCESS </code><code class="sql keyword">FULL</code><code class="sql plain">| T_LOCAL | 50 | 3000 | 3 (0)| 00:00:01 | | |</code>
</div>
<div class="line number14 index13 alt1">
<code class="sql plain">| 3 | REMOTE | T_REMOTE | 1 | 66 | 2 (0)| 00:00:01 | DBLIN~ | R->S |</code>
</div>
<div class="line number15 index14 alt2">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number16 index15 alt1">
<code class="sql plain">Remote SQL Information (identified </code><code class="sql keyword">by</code> <code class="sql plain">operation id):</code>
</div>
<div class="line number17 index16 alt2">
<code class="sql comments">----------------------------------------------------</code>
</div>
<div class="line number18 index17 alt1">
<code class="sql spaces"> </code><code class="sql plain">3 - </code><code class="sql keyword">SELECT</code> <code class="sql string">"COL20"</code><code class="sql plain">,</code><code class="sql string">"COL25"</code><code class="sql plain">,</code><code class="sql string">"COL26"</code><code class="sql plain">,</code><code class="sql string">"COL27"</code> <code class="sql keyword">FROM</code> <code class="sql string">"T_REMOTE"</code> <code class="sql string">"R"</code> <code class="sql keyword">WHERE</code> <code class="sql plain">:1=</code><code class="sql string">"COL20"</code>
</div>
<div class="line number19 index18 alt2">
<code class="sql spaces"> </code><code class="sql plain">(accessing </code><code class="sql string">'DBLINK_REMOTE'</code> <code class="sql plain">)</code>
</div>
<div class="line number20 index19 alt1">
<code class="sql plain">23 </code><code class="sql keyword">rows</code> <code class="sql plain">selected.</code>
</div>
<div class="line number21 index20 alt2">
<code class="sql plain">SQL></code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
上述的测试,其实是可以验证我们的猜测的。oracle对于通过dblink关联访问远程表,只是会意识到最近创建的20个索引的字段。这个意识到索引的窗口是20个,一旦建立了一个新索引,那么最旧的一个索引会被无视。</p>
<p>
<span><span><strong>(七)我们尝试rebuild索引,看看有没有效果:</strong></span></span></p>
<p>
rebuild第2个索引</p>
<div class="jb51code">
<div>
<div class="syntaxhighlightersql" id="highlighter_248095">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="sql keyword">alter</code> <code class="sql keyword">index</code> <code class="sql plain">t_remote_i02 rebuild;</code>
</div>
<div class="line number2 index1 alt1">
<code class="sql keyword">exec</code> <code class="sql plain">dbms_stats.gather_table_stats(</code><code class="sql color2">user</code><code class="sql plain">,</code><code class="sql string">'T_REMOTE'</code><code class="sql plain">);</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
<span><span><strong>(八)在第2个索引rebuild之后,重复上面4个测试:</strong></span></span></p>
<div class="jb51code">
<div>
<div class="syntaxhighlightersql" id="highlighter_435133">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
<div class="line number8 index7 alt1">
8</div>
<div class="line number9 index8 alt2">
9</div>
<div class="line number10 index9 alt1">
10</div>
<div class="line number11 index10 alt2">
11</div>
<div class="line number12 index11 alt1">
12</div>
<div class="line number13 index12 alt2">
13</div>
<div class="line number14 index13 alt1">
14</div>
<div class="line number15 index14 alt2">
15</div>
<div class="line number16 index15 alt1">
16</div>
<div class="line number17 index16 alt2">
17</div>
<div class="line number18 index17 alt1">
18</div>
<div class="line number19 index18 alt2">
19</div>
<div class="line number20 index19 alt1">
20</div>
<div class="line number21 index20 alt2">
21</div>
<div class="line number22 index21 alt1">
22</div>
<div class="line number23 index22 alt2">
23</div>
<div class="line number24 index23 alt1">
24</div>
<div class="line number25 index24 alt2">
25</div>
<div class="line number26 index25 alt1">
26</div>
<div class="line number27 index26 alt2">
27</div>
<div class="line number28 index27 alt1">
28</div>
<div class="line number29 index28 alt2">
29</div>
<div class="line number30 index29 alt1">
30</div>
<div class="line number31 index30 alt2">
31</div>
<div class="line number32 index31 alt1">
32</div>
<div class="line number33 index32 alt2">
33</div>
<div class="line number34 index33 alt1">
34</div>
<div class="line number35 index34 alt2">
35</div>
<div class="line number36 index35 alt1">
36</div>
<div class="line number37 index36 alt2">
37</div>
<div class="line number38 index37 alt1">
38</div>
<div class="line number39 index38 alt2">
39</div>
<div class="line number40 index39 alt1">
40</div>
<div class="line number41 index40 alt2">
41</div>
<div class="line number42 index41 alt1">
42</div>
<div class="line number43 index42 alt2">
43</div>
<div class="line number44 index43 alt1">
44</div>
<div class="line number45 index44 alt2">
45</div>
<div class="line number46 index45 alt1">
46</div>
<div class="line number47 index46 alt2">
47</div>
<div class="line number48 index47 alt1">
48</div>
<div class="line number49 index48 alt2">
49</div>
<div class="line number50 index49 alt1">
50</div>
<div class="line number51 index50 alt2">
51</div>
<div class="line number52 index51 alt1">
52</div>
<div class="line number53 index52 alt2">
53</div>
<div class="line number54 index53 alt1">
54</div>
<div class="line number55 index54 alt2">
55</div>
<div class="line number56 index55 alt1">
56</div>
<div class="line number57 index56 alt2">
57</div>
<div class="line number58 index57 alt1">
58</div>
<div class="line number59 index58 alt2">
59</div>
<div class="line number60 index59 alt1">
60</div>
<div class="line number61 index60 alt2">
61</div>
<div class="line number62 index61 alt1">
62</div>
<div class="line number63 index62 alt2">
63</div>
<div class="line number64 index63 alt1">
64</div>
<div class="line number65 index64 alt2">
65</div>
<div class="line number66 index65 alt1">
66</div>
<div class="line number67 index66 alt2">
67</div>
<div class="line number68 index67 alt1">
68</div>
<div class="line number69 index68 alt2">
69</div>
<div class="line number70 index69 alt1">
70</div>
<div class="line number71 index70 alt2">
71</div>
<div class="line number72 index71 alt1">
72</div>
<div class="line number73 index72 alt2">
73</div>
<div class="line number74 index73 alt1">
74</div>
<div class="line number75 index74 alt2">
75</div>
<div class="line number76 index75 alt1">
76</div>
<div class="line number77 index76 alt2">
77</div>
<div class="line number78 index77 alt1">
78</div>
<div class="line number79 index78 alt2">
79</div>
<div class="line number80 index79 alt1">
80</div>
<div class="line number81 index80 alt2">
81</div>
<div class="line number82 index81 alt1">
82</div>
<div class="line number83 index82 alt2">
83</div>
<div class="line number84 index83 alt1">
84</div>
<div class="line number85 index84 alt2">
85</div>
<div class="line number86 index85 alt1">
86</div>
<div class="line number87 index86 alt2">
87</div>
<div class="line number88 index87 alt1">
88</div>
<div class="line number89 index88 alt2">
89</div>
<div class="line number90 index89 alt1">
90</div>
<div class="line number91 index90 alt2">
91</div>
<div class="line number92 index91 alt1">
92</div>
<div class="line number93 index92 alt2">
93</div>
<div class="line number94 index93 alt1">
94</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="sql comments">--测试场景1:</code>
</div>
<div class="line number2 index1 alt1">
<code class="sql plain">PLAN_TABLE_OUTPUT</code>
</div>
<div class="line number3 index2 alt2">
<code class="sql comments">---------------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number4 index3 alt1">
<code class="sql plain">SQL_ID 04schqc3d9rgm, child number 0</code>
</div>
<div class="line number5 index4 alt2">
<code class="sql comments">-------------------------------------</code>
</div>
<div class="line number6 index5 alt1">
<code class="sql keyword">select</code> <code class="sql plain">l.col06,l.col05,l.col04,r.col27, r.col26,r.col25 </code><code class="sql keyword">from</code> <code class="sql plain">t_local l,</code>
</div>
<div class="line number7 index6 alt2">
<code class="sql plain">t_remote@dblink_remote r </code><code class="sql keyword">where</code> <code class="sql plain">l.col01=r.col01</code>
</div>
<div class="line number8 index7 alt1">
<code class="sql plain">Plan hash value: 830255788</code>
</div>
<div class="line number9 index8 alt2">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number10 index9 alt1">
<code class="sql plain">| Id | Operation | </code><code class="sql keyword">Name</code> <code class="sql plain">| </code><code class="sql keyword">Rows</code> <code class="sql plain">| Bytes | Cost (%CPU)| </code><code class="sql keyword">Time</code> <code class="sql plain">| Inst |</code><code class="sql color1">IN</code><code class="sql plain">-</code><code class="sql keyword">OUT</code><code class="sql plain">|</code>
</div>
<div class="line number11 index10 alt2">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number12 index11 alt1">
<code class="sql plain">| 0 | </code><code class="sql keyword">SELECT</code> <code class="sql plain">STATEMENT | | | | 156 (100)| | | |</code>
</div>
<div class="line number13 index12 alt2">
<code class="sql plain">|* 1 | HASH </code><code class="sql color1">JOIN</code> <code class="sql plain">| | 50 | 6300 | 156 (0)| 00:00:01 | | |</code>
</div>
<div class="line number14 index13 alt1">
<code class="sql plain">| 2 | </code><code class="sql keyword">TABLE</code> <code class="sql plain">ACCESS </code><code class="sql keyword">FULL</code><code class="sql plain">| T_LOCAL | 50 | 3000 | 3 (0)| 00:00:01 | | |</code>
</div>
<div class="line number15 index14 alt2">
<code class="sql plain">| 3 | REMOTE | T_REMOTE | 10000 | 644K| 153 (0)| 00:00:01 | DBLIN~ | R->S |</code>
</div>
<div class="line number16 index15 alt1">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number17 index16 alt2">
<code class="sql plain">Predicate Information (identified </code><code class="sql keyword">by</code> <code class="sql plain">operation id):</code>
</div>
<div class="line number18 index17 alt1">
<code class="sql comments">---------------------------------------------------</code>
</div>
<div class="line number19 index18 alt2">
<code class="sql spaces"> </code><code class="sql plain">1 - access(</code><code class="sql string">"L"</code><code class="sql plain">.</code><code class="sql string">"COL01"</code><code class="sql plain">=</code><code class="sql string">"R"</code><code class="sql plain">.</code><code class="sql string">"COL01"</code><code class="sql plain">)</code>
</div>
<div class="line number20 index19 alt1">
<code class="sql plain">Remote SQL Information (identified </code><code class="sql keyword">by</code> <code class="sql plain">operation id):</code>
</div>
<div class="line number21 index20 alt2">
<code class="sql comments">----------------------------------------------------</code>
</div>
<div class="line number22 index21 alt1">
<code class="sql spaces"> </code><code class="sql plain">3 - </code><code class="sql keyword">SELECT</code> <code class="sql string">"COL01"</code><code class="sql plain">,</code><code class="sql string">"COL25"</code><code class="sql plain">,</code><code class="sql string">"COL26"</code><code class="sql plain">,</code><code class="sql string">"COL27"</code> <code class="sql keyword">FROM</code> <code class="sql string">"T_REMOTE"</code> <code class="sql string">"R"</code> <code class="sql plain">(accessing</code>
</div>
<div class="line number23 index22 alt2">
<code class="sql spaces"> </code><code class="sql string">'DBLINK_REMOTE'</code> <code class="sql plain">)</code>
</div>
<div class="line number24 index23 alt1">
<code class="sql plain">28 </code><code class="sql keyword">rows</code> <code class="sql plain">selected.</code>
</div>
<div class="line number25 index24 alt2">
<code class="sql plain">SQL> </code>
</div>
<div class="line number26 index25 alt1">
<code class="sql comments">--测试场景2:</code>
</div>
<div class="line number27 index26 alt2">
<code class="sql plain">PLAN_TABLE_OUTPUT</code>
</div>
<div class="line number28 index27 alt1">
<code class="sql comments">---------------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number29 index28 alt2">
<code class="sql plain">SQL_ID 5rwtbwcnv0tsm, child number 0</code>
</div>
<div class="line number30 index29 alt1">
<code class="sql comments">-------------------------------------</code>
</div>
<div class="line number31 index30 alt2">
<code class="sql keyword">select</code> <code class="sql plain">l.col06,l.col05,l.col04,r.col27, r.col26,r.col25 </code><code class="sql keyword">from</code> <code class="sql plain">t_local l,</code>
</div>
<div class="line number32 index31 alt1">
<code class="sql plain">t_remote@dblink_remote r </code><code class="sql keyword">where</code> <code class="sql plain">l.col01=r.col20</code>
</div>
<div class="line number33 index32 alt2">
<code class="sql plain">Plan hash value: 631452043</code>
</div>
<div class="line number34 index33 alt1">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number35 index34 alt2">
<code class="sql plain">| Id | Operation | </code><code class="sql keyword">Name</code> <code class="sql plain">| </code><code class="sql keyword">Rows</code> <code class="sql plain">| Bytes | Cost (%CPU)| </code><code class="sql keyword">Time</code> <code class="sql plain">| Inst |</code><code class="sql color1">IN</code><code class="sql plain">-</code><code class="sql keyword">OUT</code><code class="sql plain">|</code>
</div>
<div class="line number36 index35 alt1">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number37 index36 alt2">
<code class="sql plain">| 0 | </code><code class="sql keyword">SELECT</code> <code class="sql plain">STATEMENT | | | | 103 (100)| | | |</code>
</div>
<div class="line number38 index37 alt1">
<code class="sql plain">| 1 | NESTED LOOPS | | 50 | 6300 | 103 (0)| 00:00:01 | | |</code>
</div>
<div class="line number39 index38 alt2">
<code class="sql plain">| 2 | </code><code class="sql keyword">TABLE</code> <code class="sql plain">ACCESS </code><code class="sql keyword">FULL</code><code class="sql plain">| T_LOCAL | 50 | 3000 | 3 (0)| 00:00:01 | | |</code>
</div>
<div class="line number40 index39 alt1">
<code class="sql plain">| 3 | REMOTE | T_REMOTE | 1 | 66 | 2 (0)| 00:00:01 | DBLIN~ | R->S |</code>
</div>
<div class="line number41 index40 alt2">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number42 index41 alt1">
<code class="sql plain">Remote SQL Information (identified </code><code class="sql keyword">by</code> <code class="sql plain">operation id):</code>
</div>
<div class="line number43 index42 alt2">
<code class="sql comments">----------------------------------------------------</code>
</div>
<div class="line number44 index43 alt1">
<code class="sql spaces"> </code><code class="sql plain">3 - </code><code class="sql keyword">SELECT</code> <code class="sql string">"COL20"</code><code class="sql plain">,</code><code class="sql string">"COL25"</code><code class="sql plain">,</code><code class="sql string">"COL26"</code><code class="sql plain">,</code><code class="sql string">"COL27"</code> <code class="sql keyword">FROM</code> <code class="sql string">"T_REMOTE"</code> <code class="sql string">"R"</code> <code class="sql keyword">WHERE</code> <code class="sql plain">:1=</code><code class="sql string">"COL20"</code>
</div>
<div class="line number45 index44 alt2">
<code class="sql spaces"> </code><code class="sql plain">(accessing </code><code class="sql string">'DBLINK_REMOTE'</code> <code class="sql plain">)</code>
</div>
<div class="line number46 index45 alt1">
<code class="sql plain">23 </code><code class="sql keyword">rows</code> <code class="sql plain">selected.</code>
</div>
<div class="line number47 index46 alt2">
<code class="sql plain">SQL> </code>
</div>
<div class="line number48 index47 alt1">
<code class="sql comments">--测试场景3:</code>
</div>
<div class="line number49 index48 alt2">
<code class="sql plain">PLAN_TABLE_OUTPUT</code>
</div>
<div class="line number50 index49 alt1">
<code class="sql comments">---------------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number51 index50 alt2">
<code class="sql plain">SQL_ID 81ctrx5huhfvq, child number 0</code>
</div>
<div class="line number52 index51 alt1">
<code class="sql comments">-------------------------------------</code>
</div>
<div class="line number53 index52 alt2">
<code class="sql keyword">select</code> <code class="sql plain">l.col06,l.col05,l.col04,r.col27, r.col26,r.col25 </code><code class="sql keyword">from</code> <code class="sql plain">t_local l,</code>
</div>
<div class="line number54 index53 alt1">
<code class="sql plain">t_remote@dblink_remote r </code><code class="sql keyword">where</code> <code class="sql plain">l.col02=r.col02</code>
</div>
<div class="line number55 index54 alt2">
<code class="sql plain">Plan hash value: 830255788</code>
</div>
<div class="line number56 index55 alt1">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number57 index56 alt2">
<code class="sql plain">| Id | Operation | </code><code class="sql keyword">Name</code> <code class="sql plain">| </code><code class="sql keyword">Rows</code> <code class="sql plain">| Bytes | Cost (%CPU)| </code><code class="sql keyword">Time</code> <code class="sql plain">| Inst |</code><code class="sql color1">IN</code><code class="sql plain">-</code><code class="sql keyword">OUT</code><code class="sql plain">|</code>
</div>
<div class="line number58 index57 alt1">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number59 index58 alt2">
<code class="sql plain">| 0 | </code><code class="sql keyword">SELECT</code> <code class="sql plain">STATEMENT | | | | 156 (100)| | | |</code>
</div>
<div class="line number60 index59 alt1">
<code class="sql plain">|* 1 | HASH </code><code class="sql color1">JOIN</code> <code class="sql plain">| | 50 | 6300 | 156 (0)| 00:00:01 | | |</code>
</div>
<div class="line number61 index60 alt2">
<code class="sql plain">| 2 | </code><code class="sql keyword">TABLE</code> <code class="sql plain">ACCESS </code><code class="sql keyword">FULL</code><code class="sql plain">| T_LOCAL | 50 | 3000 | 3 (0)| 00:00:01 | | |</code>
</div>
<div class="line number62 index61 alt1">
<code class="sql plain">| 3 | REMOTE | T_REMOTE | 10000 | 644K| 153 (0)| 00:00:01 | DBLIN~ | R->S |</code>
</div>
<div class="line number63 index62 alt2">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number64 index63 alt1">
<code class="sql plain">Predicate Information (identified </code><code class="sql keyword">by</code> <code class="sql plain">operation id):</code>
</div>
<div class="line number65 index64 alt2">
<code class="sql comments">---------------------------------------------------</code>
</div>
<div class="line number66 index65 alt1">
<code class="sql spaces"> </code><code class="sql plain">1 - access(</code><code class="sql string">"L"</code><code class="sql plain">.</code><code class="sql string">"COL02"</code><code class="sql plain">=</code><code class="sql string">"R"</code><code class="sql plain">.</code><code class="sql string">"COL02"</code><code class="sql plain">)</code>
</div>
<div class="line number67 index66 alt2">
<code class="sql plain">Remote SQL Information (identified </code><code class="sql keyword">by</code> <code class="sql plain">operation id):</code>
</div>
<div class="line number68 index67 alt1">
<code class="sql comments">----------------------------------------------------</code>
</div>
<div class="line number69 index68 alt2">
<code class="sql spaces"> </code><code class="sql plain">3 - </code><code class="sql keyword">SELECT</code> <code class="sql string">"COL02"</code><code class="sql plain">,</code><code class="sql string">"COL25"</code><code class="sql plain">,</code><code class="sql string">"COL26"</code><code class="sql plain">,</code><code class="sql string">"COL27"</code> <code class="sql keyword">FROM</code> <code class="sql string">"T_REMOTE"</code> <code class="sql string">"R"</code> <code class="sql plain">(accessing</code>
</div>
<div class="line number70 index69 alt1">
<code class="sql spaces"> </code><code class="sql string">'DBLINK_REMOTE'</code> <code class="sql plain">)</code>
</div>
<div class="line number71 index70 alt2">
<code class="sql plain">28 </code><code class="sql keyword">rows</code> <code class="sql plain">selected.</code>
</div>
<div class="line number72 index71 alt1">
<code class="sql plain">SQL></code>
</div>
<div class="line number73 index72 alt2">
<code class="sql comments">--测试场景4:</code>
</div>
<div class="line number74 index73 alt1">
<code class="sql plain">PLAN_TABLE_OUTPUT</code>
</div>
<div class="line number75 index74 alt2">
<code class="sql comments">---------------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number76 index75 alt1">
<code class="sql plain">SQL_ID 407pxjh9mgbry, child number 0</code>
</div>
<div class="line number77 index76 alt2">
<code class="sql comments">-------------------------------------</code>
</div>
<div class="line number78 index77 alt1">
<code class="sql keyword">select</code> <code class="sql plain">l.col06,l.col05,l.col04,r.col27, r.col26,r.col25 </code><code class="sql keyword">from</code> <code class="sql plain">t_local l,</code>
</div>
<div class="line number79 index78 alt2">
<code class="sql plain">t_remote@dblink_remote r </code><code class="sql keyword">where</code> <code class="sql plain">l.col02=r.col20</code>
</div>
<div class="line number80 index79 alt1">
<code class="sql plain">Plan hash value: 631452043</code>
</div>
<div class="line number81 index80 alt2">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number82 index81 alt1">
<code class="sql plain">| Id | Operation | </code><code class="sql keyword">Name</code> <code class="sql plain">| </code><code class="sql keyword">Rows</code> <code class="sql plain">| Bytes | Cost (%CPU)| </code><code class="sql keyword">Time</code> <code class="sql plain">| Inst |</code><code class="sql color1">IN</code><code class="sql plain">-</code><code class="sql keyword">OUT</code><code class="sql plain">|</code>
</div>
<div class="line number83 index82 alt2">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number84 index83 alt1">
<code class="sql plain">| 0 | </code><code class="sql keyword">SELECT</code> <code class="sql plain">STATEMENT | | | | 103 (100)| | | |</code>
</div>
<div class="line number85 index84 alt2">
<code class="sql plain">| 1 | NESTED LOOPS | | 50 | 6300 | 103 (0)| 00:00:01 | | |</code>
</div>
<div class="line number86 index85 alt1">
<code class="sql plain">| 2 | </code><code class="sql keyword">TABLE</code> <code class="sql plain">ACCESS </code><code class="sql keyword">FULL</code><code class="sql plain">| T_LOCAL | 50 | 3000 | 3 (0)| 00:00:01 | | |</code>
</div>
<div class="line number87 index86 alt2">
<code class="sql plain">| 3 | REMOTE | T_REMOTE | 1 | 66 | 2 (0)| 00:00:01 | DBLIN~ | R->S |</code>
</div>
<div class="line number88 index87 alt1">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number89 index88 alt2">
<code class="sql plain">Remote SQL Information (identified </code><code class="sql keyword">by</code> <code class="sql plain">operation id):</code>
</div>
<div class="line number90 index89 alt1">
<code class="sql comments">----------------------------------------------------</code>
</div>
<div class="line number91 index90 alt2">
<code class="sql spaces"> </code><code class="sql plain">3 - </code><code class="sql keyword">SELECT</code> <code class="sql string">"COL20"</code><code class="sql plain">,</code><code class="sql string">"COL25"</code><code class="sql plain">,</code><code class="sql string">"COL26"</code><code class="sql plain">,</code><code class="sql string">"COL27"</code> <code class="sql keyword">FROM</code> <code class="sql string">"T_REMOTE"</code> <code class="sql string">"R"</code> <code class="sql keyword">WHERE</code> <code class="sql plain">:1=</code><code class="sql string">"COL20"</code>
</div>
<div class="line number92 index91 alt1">
<code class="sql spaces"> </code><code class="sql plain">(accessing </code><code class="sql string">'DBLINK_REMOTE'</code> <code class="sql plain">)</code>
</div>
<div class="line number93 index92 alt2">
<code class="sql plain">23 </code><code class="sql keyword">rows</code> <code class="sql plain">selected.</code>
</div>
<div class="line number94 index93 alt1">
<code class="sql plain">SQL></code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
所以我们看到,索引rebuild,是不能起到重新“唤醒”索引的作用。</p>
<p>
<span><span><strong>(九)我们尝试 drop and recreate 第2个索引。</strong></span></span></p>
<div class="jb51code">
<div>
<div class="syntaxhighlightersql" id="highlighter_614279">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="sql keyword">drop</code> <code class="sql keyword">index</code> <code class="sql plain">t_remote_i02;</code>
</div>
<div class="line number2 index1 alt1">
<code class="sql keyword">create</code> <code class="sql keyword">index</code> <code class="sql plain">t_remote_i02 </code><code class="sql keyword">on</code> <code class="sql plain">t_remote (col02);</code>
</div>
<div class="line number3 index2 alt2">
<code class="sql spaces"> </code>
</div>
<div class="line number4 index3 alt1">
<code class="sql keyword">exec</code> <code class="sql plain">dbms_stats.gather_table_stats(</code><code class="sql color2">user</code><code class="sql plain">,</code><code class="sql string">'T_REMOTE'</code><code class="sql plain">);</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
<span><span><strong>(十)重复上面的测试3和测试4:</strong></span></span></p>
<div class="jb51code">
<div>
<div class="syntaxhighlightersql" id="highlighter_406020">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
<div class="line number8 index7 alt1">
8</div>
<div class="line number9 index8 alt2">
9</div>
<div class="line number10 index9 alt1">
10</div>
<div class="line number11 index10 alt2">
11</div>
<div class="line number12 index11 alt1">
12</div>
<div class="line number13 index12 alt2">
13</div>
<div class="line number14 index13 alt1">
14</div>
<div class="line number15 index14 alt2">
15</div>
<div class="line number16 index15 alt1">
16</div>
<div class="line number17 index16 alt2">
17</div>
<div class="line number18 index17 alt1">
18</div>
<div class="line number19 index18 alt2">
19</div>
<div class="line number20 index19 alt1">
20</div>
<div class="line number21 index20 alt2">
21</div>
<div class="line number22 index21 alt1">
22</div>
<div class="line number23 index22 alt2">
23</div>
<div class="line number24 index23 alt1">
24</div>
<div class="line number25 index24 alt2">
25</div>
<div class="line number26 index25 alt1">
26</div>
<div class="line number27 index26 alt2">
27</div>
<div class="line number28 index27 alt1">
28</div>
<div class="line number29 index28 alt2">
29</div>
<div class="line number30 index29 alt1">
30</div>
<div class="line number31 index30 alt2">
31</div>
<div class="line number32 index31 alt1">
32</div>
<div class="line number33 index32 alt2">
33</div>
<div class="line number34 index33 alt1">
34</div>
<div class="line number35 index34 alt2">
35</div>
<div class="line number36 index35 alt1">
36</div>
<div class="line number37 index36 alt2">
37</div>
<div class="line number38 index37 alt1">
38</div>
<div class="line number39 index38 alt2">
39</div>
<div class="line number40 index39 alt1">
40</div>
<div class="line number41 index40 alt2">
41</div>
<div class="line number42 index41 alt1">
42</div>
<div class="line number43 index42 alt2">
43</div>
<div class="line number44 index43 alt1">
44</div>
<div class="line number45 index44 alt2">
45</div>
<div class="line number46 index45 alt1">
46</div>
<div class="line number47 index46 alt2">
47</div>
<div class="line number48 index47 alt1">
48</div>
<div class="line number49 index48 alt2">
49</div>
<div class="line number50 index49 alt1">
50</div>
<div class="line number51 index50 alt2">
51</div>
<div class="line number52 index51 alt1">
52</div>
<div class="line number53 index52 alt2">
53</div>
<div class="line number54 index53 alt1">
54</div>
<div class="line number55 index54 alt2">
55</div>
<div class="line number56 index55 alt1">
56</div>
<div class="line number57 index56 alt2">
57</div>
<div class="line number58 index57 alt1">
58</div>
<div class="line number59 index58 alt2">
59</div>
<div class="line number60 index59 alt1">
60</div>
<div class="line number61 index60 alt2">
61</div>
<div class="line number62 index61 alt1">
62</div>
<div class="line number63 index62 alt2">
63</div>
<div class="line number64 index63 alt1">
64</div>
<div class="line number65 index64 alt2">
65</div>
<div class="line number66 index65 alt1">
66</div>
<div class="line number67 index66 alt2">
67</div>
<div class="line number68 index67 alt1">
68</div>
<div class="line number69 index68 alt2">
69</div>
<div class="line number70 index69 alt1">
70</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="sql plain">测试3:</code>
</div>
<div class="line number2 index1 alt1">
<code class="sql plain">PLAN_TABLE_OUTPUT</code>
</div>
<div class="line number3 index2 alt2">
<code class="sql comments">---------------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number4 index3 alt1">
<code class="sql plain">SQL_ID 81ctrx5huhfvq, child number 1</code>
</div>
<div class="line number5 index4 alt2">
<code class="sql comments">-------------------------------------</code>
</div>
<div class="line number6 index5 alt1">
<code class="sql keyword">select</code> <code class="sql plain">l.col06,l.col05,l.col04,r.col27, r.col26,r.col25 </code><code class="sql keyword">from</code> <code class="sql plain">t_local l,</code>
</div>
<div class="line number7 index6 alt2">
<code class="sql plain">t_remote@dblink_remote r </code><code class="sql keyword">where</code> <code class="sql plain">l.col02=r.col02</code>
</div>
<div class="line number8 index7 alt1">
<code class="sql plain">Plan hash value: 631452043</code>
</div>
<div class="line number9 index8 alt2">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number10 index9 alt1">
<code class="sql plain">| Id | Operation | </code><code class="sql keyword">Name</code> <code class="sql plain">| </code><code class="sql keyword">Rows</code> <code class="sql plain">| Bytes | Cost (%CPU)| </code><code class="sql keyword">Time</code> <code class="sql plain">| Inst |</code><code class="sql color1">IN</code><code class="sql plain">-</code><code class="sql keyword">OUT</code><code class="sql plain">|</code>
</div>
<div class="line number11 index10 alt2">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number12 index11 alt1">
<code class="sql plain">| 0 | </code><code class="sql keyword">SELECT</code> <code class="sql plain">STATEMENT | | | | 103 (100)| | | |</code>
</div>
<div class="line number13 index12 alt2">
<code class="sql plain">| 1 | NESTED LOOPS | | 50 | 6300 | 103 (0)| 00:00:01 | | |</code>
</div>
<div class="line number14 index13 alt1">
<code class="sql plain">| 2 | </code><code class="sql keyword">TABLE</code> <code class="sql plain">ACCESS </code><code class="sql keyword">FULL</code><code class="sql plain">| T_LOCAL | 50 | 3000 | 3 (0)| 00:00:01 | | |</code>
</div>
<div class="line number15 index14 alt2">
<code class="sql plain">| 3 | REMOTE | T_REMOTE | 1 | 66 | 2 (0)| 00:00:01 | DBLIN~ | R->S |</code>
</div>
<div class="line number16 index15 alt1">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number17 index16 alt2">
<code class="sql plain">Remote SQL Information (identified </code><code class="sql keyword">by</code> <code class="sql plain">operation id):</code>
</div>
<div class="line number18 index17 alt1">
<code class="sql comments">----------------------------------------------------</code>
</div>
<div class="line number19 index18 alt2">
<code class="sql spaces"> </code><code class="sql plain">3 - </code><code class="sql keyword">SELECT</code> <code class="sql string">"COL02"</code><code class="sql plain">,</code><code class="sql string">"COL25"</code><code class="sql plain">,</code><code class="sql string">"COL26"</code><code class="sql plain">,</code><code class="sql string">"COL27"</code> <code class="sql keyword">FROM</code> <code class="sql string">"T_REMOTE"</code> <code class="sql string">"R"</code> <code class="sql keyword">WHERE</code> <code class="sql plain">:1=</code><code class="sql string">"COL02"</code>
</div>
<div class="line number20 index19 alt1">
<code class="sql spaces"> </code><code class="sql plain">(accessing </code><code class="sql string">'DBLINK_REMOTE'</code> <code class="sql plain">)</code>
</div>
<div class="line number21 index20 alt2">
<code class="sql plain">23 </code><code class="sql keyword">rows</code> <code class="sql plain">selected.</code>
</div>
<div class="line number22 index21 alt1">
<code class="sql plain">SQL></code>
</div>
<div class="line number23 index22 alt2">
<code class="sql plain">测试4:</code>
</div>
<div class="line number24 index23 alt1">
<code class="sql plain">PLAN_TABLE_OUTPUT</code>
</div>
<div class="line number25 index24 alt2">
<code class="sql comments">---------------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number26 index25 alt1">
<code class="sql plain">SQL_ID 407pxjh9mgbry, child number 1</code>
</div>
<div class="line number27 index26 alt2">
<code class="sql comments">-------------------------------------</code>
</div>
<div class="line number28 index27 alt1">
<code class="sql keyword">select</code> <code class="sql plain">l.col06,l.col05,l.col04,r.col27, r.col26,r.col25 </code><code class="sql keyword">from</code> <code class="sql plain">t_local l,</code>
</div>
<div class="line number29 index28 alt2">
<code class="sql plain">t_remote@dblink_remote r </code><code class="sql keyword">where</code> <code class="sql plain">l.col02=r.col20</code>
</div>
<div class="line number30 index29 alt1">
<code class="sql plain">Plan hash value: 631452043</code>
</div>
<div class="line number31 index30 alt2">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number32 index31 alt1">
<code class="sql plain">| Id | Operation | </code><code class="sql keyword">Name</code> <code class="sql plain">| </code><code class="sql keyword">Rows</code> <code class="sql plain">| Bytes | Cost (%CPU)| </code><code class="sql keyword">Time</code> <code class="sql plain">| Inst |</code><code class="sql color1">IN</code><code class="sql plain">-</code><code class="sql keyword">OUT</code><code class="sql plain">|</code>
</div>
<div class="line number33 index32 alt2">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number34 index33 alt1">
<code class="sql plain">| 0 | </code><code class="sql keyword">SELECT</code> <code class="sql plain">STATEMENT | | | | 103 (100)| | | |</code>
</div>
<div class="line number35 index34 alt2">
<code class="sql plain">| 1 | NESTED LOOPS | | 50 | 6300 | 103 (0)| 00:00:01 | | |</code>
</div>
<div class="line number36 index35 alt1">
<code class="sql plain">| 2 | </code><code class="sql keyword">TABLE</code> <code class="sql plain">ACCESS </code><code class="sql keyword">FULL</code><code class="sql plain">| T_LOCAL | 50 | 3000 | 3 (0)| 00:00:01 | | |</code>
</div>
<div class="line number37 index36 alt2">
<code class="sql plain">| 3 | REMOTE | T_REMOTE | 1 | 66 | 2 (0)| 00:00:01 | DBLIN~ | R->S |</code>
</div>
<div class="line number38 index37 alt1">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number39 index38 alt2">
<code class="sql plain">Remote SQL Information (identified </code><code class="sql keyword">by</code> <code class="sql plain">operation id):</code>
</div>
<div class="line number40 index39 alt1">
<code class="sql comments">----------------------------------------------------</code>
</div>
<div class="line number41 index40 alt2">
<code class="sql spaces"> </code><code class="sql plain">3 - </code><code class="sql keyword">SELECT</code> <code class="sql string">"COL20"</code><code class="sql plain">,</code><code class="sql string">"COL25"</code><code class="sql plain">,</code><code class="sql string">"COL26"</code><code class="sql plain">,</code><code class="sql string">"COL27"</code> <code class="sql keyword">FROM</code> <code class="sql string">"T_REMOTE"</code> <code class="sql string">"R"</code> <code class="sql keyword">WHERE</code> <code class="sql plain">:1=</code><code class="sql string">"COL20"</code>
</div>
<div class="line number42 index41 alt1">
<code class="sql spaces"> </code><code class="sql plain">(accessing </code><code class="sql string">'DBLINK_REMOTE'</code> <code class="sql plain">)</code>
</div>
<div class="line number43 index42 alt2">
<code class="sql plain">23 </code><code class="sql keyword">rows</code> <code class="sql plain">selected.</code>
</div>
<div class="line number44 index43 alt1">
<code class="sql plain">SQL> </code>
</div>
<div class="line number45 index44 alt2">
<code class="sql plain">此时,其实我们可以预测,远程表此时col03上的索引是用不到的,我们来测试验证一下:</code>
</div>
<div class="line number46 index45 alt1">
<code class="sql plain">测试5:</code>
</div>
<div class="line number47 index46 alt2">
<code class="sql plain">PLAN_TABLE_OUTPUT</code>
</div>
<div class="line number48 index47 alt1">
<code class="sql comments">---------------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number49 index48 alt2">
<code class="sql plain">SQL_ID bhkczcfrhvsuw, child number 0</code>
</div>
<div class="line number50 index49 alt1">
<code class="sql comments">-------------------------------------</code>
</div>
<div class="line number51 index50 alt2">
<code class="sql keyword">select</code> <code class="sql plain">l.col06,l.col05,l.col04,r.col27, r.col26,r.col25 </code><code class="sql keyword">from</code> <code class="sql plain">t_local l,</code>
</div>
<div class="line number52 index51 alt1">
<code class="sql plain">t_remote@dblink_remote r </code><code class="sql keyword">where</code> <code class="sql plain">l.col03=r.col03</code>
</div>
<div class="line number53 index52 alt2">
<code class="sql plain">Plan hash value: 830255788</code>
</div>
<div class="line number54 index53 alt1">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number55 index54 alt2">
<code class="sql plain">| Id | Operation | </code><code class="sql keyword">Name</code> <code class="sql plain">| </code><code class="sql keyword">Rows</code> <code class="sql plain">| Bytes | Cost (%CPU)| </code><code class="sql keyword">Time</code> <code class="sql plain">| Inst |</code><code class="sql color1">IN</code><code class="sql plain">-</code><code class="sql keyword">OUT</code><code class="sql plain">|</code>
</div>
<div class="line number56 index55 alt1">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number57 index56 alt2">
<code class="sql plain">| 0 | </code><code class="sql keyword">SELECT</code> <code class="sql plain">STATEMENT | | | | 157 (100)| | | |</code>
</div>
<div class="line number58 index57 alt1">
<code class="sql plain">|* 1 | HASH </code><code class="sql color1">JOIN</code> <code class="sql plain">| | 500K| 89M| 157 (1)| 00:00:01 | | |</code>
</div>
<div class="line number59 index58 alt2">
<code class="sql plain">| 2 | </code><code class="sql keyword">TABLE</code> <code class="sql plain">ACCESS </code><code class="sql keyword">FULL</code><code class="sql plain">| T_LOCAL | 50 | 5400 | 3 (0)| 00:00:01 | | |</code>
</div>
<div class="line number60 index59 alt1">
<code class="sql plain">| 3 | REMOTE | T_REMOTE | 10000 | 781K| 153 (0)| 00:00:01 | DBLIN~ | R->S |</code>
</div>
<div class="line number61 index60 alt2">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number62 index61 alt1">
<code class="sql plain">Predicate Information (identified </code><code class="sql keyword">by</code> <code class="sql plain">operation id):</code>
</div>
<div class="line number63 index62 alt2">
<code class="sql comments">---------------------------------------------------</code>
</div>
<div class="line number64 index63 alt1">
<code class="sql spaces"> </code><code class="sql plain">1 - access(</code><code class="sql string">"L"</code><code class="sql plain">.</code><code class="sql string">"COL03"</code><code class="sql plain">=</code><code class="sql string">"R"</code><code class="sql plain">.</code><code class="sql string">"COL03"</code><code class="sql plain">)</code>
</div>
<div class="line number65 index64 alt2">
<code class="sql plain">Remote SQL Information (identified </code><code class="sql keyword">by</code> <code class="sql plain">operation id):</code>
</div>
<div class="line number66 index65 alt1">
<code class="sql comments">----------------------------------------------------</code>
</div>
<div class="line number67 index66 alt2">
<code class="sql spaces"> </code><code class="sql plain">3 - </code><code class="sql keyword">SELECT</code> <code class="sql string">"COL03"</code><code class="sql plain">,</code><code class="sql string">"COL25"</code><code class="sql plain">,</code><code class="sql string">"COL26"</code><code class="sql plain">,</code><code class="sql string">"COL27"</code> <code class="sql keyword">FROM</code> <code class="sql string">"T_REMOTE"</code> <code class="sql string">"R"</code> <code class="sql plain">(accessing</code>
</div>
<div class="line number68 index67 alt1">
<code class="sql spaces"> </code><code class="sql string">'DBLINK_REMOTE'</code> <code class="sql plain">)</code>
</div>
<div class="line number69 index68 alt2">
<code class="sql plain">28 </code><code class="sql keyword">rows</code> <code class="sql plain">selected.</code>
</div>
<div class="line number70 index69 alt1">
<code class="sql plain">SQL></code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
我们可以看到,通过drop之后再重建,是可以“唤醒”第二个索引的。这也证明了我们20个索引识别的移动窗口,是按照索引的创建时间来移动的。</p>
<p>
<span><span><strong>综上:</strong></span></span></p>
<p>
1. 对于通过dblink关联本地表和远程表,如果远程表的索引个数少于20个,那么不受影响。<br>
2. 对于通过dblink关联本地表和远程表,如果远程表的索引个数增加到21个或以上,那么oracle在执行远程操作的时候,将忽略最早创建的那个索引,但是会以20个为窗口移动,最新建立的索引会被意识到。此时如果查询的关联条件中,使用到最早创建的那个索引的字段,由于忽略了索引,会走全表扫描。<br>
3. 要“唤醒”对原来索引的意识,rebuild索引无效,需要drop & create索引。<br>
4. 在本地表数据量比较少,远程表的数据量很大,而索引数量超过20个,且关联条件的字段时最早索引的情况下,可以考虑使用DRIVING_SITE的hint,将本地表的数据全量到远程中,此时远程的关联查询可以意识到那个索引。可见文末的例子。是否使用hint,需要评估本地表数据全量推送到远程的成本,和远程表使用全表扫的成本。</p>
<p>
<span><strong>附:在22个索引的情况下,尝试采用DRIVING_SITE的hint:</strong></span></p>
<div class="jb51code">
<div>
<div class="syntaxhighlightersql" id="highlighter_788809">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
<div class="line number8 index7 alt1">
8</div>
<div class="line number9 index8 alt2">
9</div>
<div class="line number10 index9 alt1">
10</div>
<div class="line number11 index10 alt2">
11</div>
<div class="line number12 index11 alt1">
12</div>
<div class="line number13 index12 alt2">
13</div>
<div class="line number14 index13 alt1">
14</div>
<div class="line number15 index14 alt2">
15</div>
<div class="line number16 index15 alt1">
16</div>
<div class="line number17 index16 alt2">
17</div>
<div class="line number18 index17 alt1">
18</div>
<div class="line number19 index18 alt2">
19</div>
<div class="line number20 index19 alt1">
20</div>
<div class="line number21 index20 alt2">
21</div>
<div class="line number22 index21 alt1">
22</div>
<div class="line number23 index22 alt2">
23</div>
<div class="line number24 index23 alt1">
24</div>
<div class="line number25 index24 alt2">
25</div>
<div class="line number26 index25 alt1">
26</div>
<div class="line number27 index26 alt2">
27</div>
<div class="line number28 index27 alt1">
28</div>
<div class="line number29 index28 alt2">
29</div>
<div class="line number30 index29 alt1">
30</div>
<div class="line number31 index30 alt2">
31</div>
<div class="line number32 index31 alt1">
32</div>
<div class="line number33 index32 alt2">
33</div>
<div class="line number34 index33 alt1">
34</div>
<div class="line number35 index34 alt2">
35</div>
<div class="line number36 index35 alt1">
36</div>
<div class="line number37 index36 alt2">
37</div>
<div class="line number38 index37 alt1">
38</div>
<div class="line number39 index38 alt2">
39</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="sql plain">SQL> </code><code class="sql keyword">select</code> <code class="sql plain">l.col06,l.col05,l.col04,r.col27, r.col26,r.col25</code>
</div>
<div class="line number2 index1 alt1">
<code class="sql spaces"> </code><code class="sql plain">2 </code><code class="sql keyword">from</code> <code class="sql plain">t_local l, t_remote@dblink_remote r</code>
</div>
<div class="line number3 index2 alt2">
<code class="sql spaces"> </code><code class="sql plain">3 </code><code class="sql keyword">where</code> <code class="sql plain">l.col02=r.col02</code>
</div>
<div class="line number4 index3 alt1">
<code class="sql spaces"> </code><code class="sql plain">4 ;</code>
</div>
<div class="line number5 index4 alt2">
<code class="sql plain">50 </code><code class="sql keyword">rows</code> <code class="sql plain">selected.</code>
</div>
<div class="line number6 index5 alt1">
<code class="sql plain">Elapsed: 00:00:00.03</code>
</div>
<div class="line number7 index6 alt2">
<code class="sql plain">Execution Plan</code>
</div>
<div class="line number8 index7 alt1">
<code class="sql comments">----------------------------------------------------------</code>
</div>
<div class="line number9 index8 alt2">
<code class="sql plain">Plan hash value: 830255788</code>
</div>
<div class="line number10 index9 alt1">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number11 index10 alt2">
<code class="sql plain">| Id | Operation | </code><code class="sql keyword">Name</code> <code class="sql plain">| </code><code class="sql keyword">Rows</code> <code class="sql plain">| Bytes | Cost (%CPU)| </code><code class="sql keyword">Time</code> <code class="sql plain">| Inst |</code><code class="sql color1">IN</code><code class="sql plain">-</code><code class="sql keyword">OUT</code><code class="sql plain">|</code>
</div>
<div class="line number12 index11 alt1">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number13 index12 alt2">
<code class="sql plain">| 0 | </code><code class="sql keyword">SELECT</code> <code class="sql plain">STATEMENT | | 50 | 6300 | 156 (0)| 00:00:01 | | |</code>
</div>
<div class="line number14 index13 alt1">
<code class="sql plain">|* 1 | HASH </code><code class="sql color1">JOIN</code> <code class="sql plain">| | 50 | 6300 | 156 (0)| 00:00:01 | | |</code>
</div>
<div class="line number15 index14 alt2">
<code class="sql plain">| 2 | </code><code class="sql keyword">TABLE</code> <code class="sql plain">ACCESS </code><code class="sql keyword">FULL</code><code class="sql plain">| T_LOCAL | 50 | 3000 | 3 (0)| 00:00:01 | | |</code>
</div>
<div class="line number16 index15 alt1">
<code class="sql plain">| 3 | REMOTE | T_REMOTE | 10000 | 644K| 153 (0)| 00:00:01 | DBLIN~ | R->S |</code>
</div>
<div class="line number17 index16 alt2">
<code class="sql comments">-----------------------------------------------------------------------------------------------</code>
</div>
<div class="line number18 index17 alt1">
<code class="sql plain">Predicate Information (identified </code><code class="sql keyword">by</code> <code class="sql plain">operation id):</code>
</div>
<div class="line number19 index18 alt2">
<code class="sql comments">---------------------------------------------------</code>
</div>
<div class="line number20 index19 alt1">
<code class="sql spaces"> </code><code class="sql plain">1 - access(</code><code class="sql string">"L"</code><code class="sql plain">.</code><code class="sql string">"COL02"</code><code class="sql plain">=</code><code class="sql string">"R"</code><code class="sql plain">.</code><code class="sql string">"COL02"</code><code class="sql plain">)</code>
</div>
<div class="line number21 index20 alt2">
<code class="sql plain">Remote SQL Information (identified </code><code class="sql keyword">by</code> <code class="sql plain">operation id):</code>
</div>
<div class="line number22 index21 alt1">
<code class="sql comments">----------------------------------------------------</code>
</div>
<div class="line number23 index22 alt2">
<code class="sql spaces"> </code><code class="sql plain">3 - </code><code class="sql keyword">SELECT</code> <code class="sql string">"COL02"</code><code class="sql plain">,</code><code class="sql string">"COL25"</code><code class="sql plain">,</code><code class="sql string">"COL26"</code><code class="sql plain">,</code><code class="sql string">"COL27"</code> <code class="sql keyword">FROM</code> <code class="sql string">"T_REMOTE"</code> <code class="sql string">"R"</code> <code class="sql plain">(accessing</code>
</div>
<div class="line number24 index23 alt1">
<code class="sql spaces"> </code><code class="sql string">'DBLINK_REMOTE'</code> <code class="sql plain">)</code>
</div>
<div class="line number25 index24 alt2">
<code class="sql keyword">Statistics</code>
</div>
<div class="line number26 index25 alt1">
<code class="sql comments">----------------------------------------------------------</code>
</div>
<div class="line number27 index26 alt2">
<code class="sql spaces"> </code><code class="sql plain">151 recursive calls</code>
</div>
<div class="line number28 index27 alt1">
<code class="sql spaces"> </code><code class="sql plain">0 db block gets</code>
</div>
<div class="line number29 index28 alt2">
<code class="sql spaces"> </code><code class="sql plain">246 consistent gets</code>
</div>
<div class="line number30 index29 alt1">
<code class="sql spaces"> </code><code class="sql plain">26 physical reads</code>
</div>
<div class="line number31 index30 alt2">
<code class="sql spaces"> </code><code class="sql plain">0 redo </code><code class="sql keyword">size</code>
</div>
<div class="line number32 index31 alt1">
<code class="sql spaces"> </code><code class="sql plain">2539 bytes sent via SQL*Net </code><code class="sql keyword">to</code> <code class="sql plain">client</code>
</div>
<div class="line number33 index32 alt2">
<code class="sql spaces"> </code><code class="sql plain">641 bytes received via SQL*Net </code><code class="sql keyword">from</code> <code class="sql plain">client</code>
</div>
<div class="line number34 index33 alt1">
<code class="sql spaces"> </code><code class="sql plain">5 SQL*Net roundtrips </code><code class="sql keyword">to</code><code class="sql plain">/</code><code class="sql keyword">from</code> <code class="sql plain">client</code>
</div>
<div class="line number35 index34 alt2">
<code class="sql spaces"> </code><code class="sql plain">10 sorts (memory)</code>
</div>
<div class="line number36 index35 alt1">
<code class="sql spaces"> </code><code class="sql plain">0 sorts (disk)</code>
</div>
<div class="line number37 index36 alt2">
<code class="sql spaces"> </code><code class="sql plain">50 </code><code class="sql keyword">rows</code> <code class="sql plain">processed</code>
</div>
<div class="line number38 index37 alt1">
<code class="sql plain">SQL></code>
</div>
<div class="line number39 index38 alt2">
<code class="sql comments">--可以看到远程表示走全表扫。</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<div class="jb51code">
<div>
<div class="syntaxhighlightersql" id="highlighter_475349">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
<div class="line number8 index7 alt1">
8</div>
<div class="line number9 index8 alt2">
9</div>
<div class="line number10 index9 alt1">
10</div>
<div class="line number11 index10 alt2">
11</div>
<div class="line number12 index11 alt1">
12</div>
<div class="line number13 index12 alt2">
13</div>
<div class="line number14 index13 alt1">
14</div>
<div class="line number15 index14 alt2">
15</div>
<div class="line number16 index15 alt1">
16</div>
<div class="line number17 index16 alt2">
17</div>
<div class="line number18 index17 alt1">
18</div>
<div class="line number19 index18 alt2">
19</div>
<div class="line number20 index19 alt1">
20</div>
<div class="line number21 index20 alt2">
21</div>
<div class="line number22 index21 alt1">
22</div>
<div class="line number23 index22 alt2">
23</div>
<div class="line number24 index23 alt1">
24</div>
<div class="line number25 index24 alt2">
25</div>
<div class="line number26 index25 alt1">
26</div>
<div class="line number27 index26 alt2">
27</div>
<div class="line number28 index27 alt1">
28</div>
<div class="line number29 index28 alt2">
29</div>
<div class="line number30 index29 alt1">
30</div>
<div class="line number31 index30 alt2">
31</div>
<div class="line number32 index31 alt1">
32</div>
<div class="line number33 index32 alt2">
33</div>
<div class="line number34 index33 alt1">
34</div>
<div class="line number35 index34 alt2">
35</div>
<div class="line number36 index35 alt1">
36</div>
<div class="line number37 index36 alt2">
37</div>
<div class="line number38 index37 alt1">
38</div>
<div class="line number39 index38 alt2">
39</div>
<div class="line number40 index39 alt1">
40</div>
<div class="line number41 index40 alt2">
41</div>
<div class="line number42 index41 alt1">
42</div>
<div class="line number43 index42 alt2">
43</div>
<div class="line number44 index43 alt1">
44</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="sql plain">SQL> </code><code class="sql keyword">select</code> <code class="sql plain">/*+DRIVING_SITE(r)*/ l.col06,l.col05,l.col04,r.col27, r.col26,r.col25</code>
</div>
<div class="line number2 index1 alt1">
<code class="sql spaces"> </code><code class="sql plain">2 </code><code class="sql keyword">from</code> <code class="sql plain">t_local l, t_remote@dblink_remote r</code>
</div>
<div class="line number3 index2 alt2">
<code class="sql spaces"> </code><code class="sql plain">3 </code><code class="sql keyword">where</code> <code class="sql plain">l.col02=r.col02</code>
</div>
<div class="line number4 index3 alt1">
<code class="sql spaces"> </code><code class="sql plain">4 ;</code>
</div>
<div class="line number5 index4 alt2">
<code class="sql plain">50 </code><code class="sql keyword">rows</code> <code class="sql plain">selected.</code>
</div>
<div class="line number6 index5 alt1">
<code class="sql plain">Elapsed: 00:00:00.03</code>
</div>
<div class="line number7 index6 alt2">
<code class="sql plain">Execution Plan</code>
</div>
<div class="line number8 index7 alt1">
<code class="sql comments">----------------------------------------------------------</code>
</div>
<div class="line number9 index8 alt2">
<code class="sql plain">Plan hash value: 1716516160</code>
</div>
<div class="line number10 index9 alt1">
<code class="sql comments">-------------------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number11 index10 alt2">
<code class="sql plain">| Id | Operation | </code><code class="sql keyword">Name</code> <code class="sql plain">| </code><code class="sql keyword">Rows</code> <code class="sql plain">| Bytes | Cost (%CPU)| </code><code class="sql keyword">Time</code> <code class="sql plain">| Inst |</code><code class="sql color1">IN</code><code class="sql plain">-</code><code class="sql keyword">OUT</code><code class="sql plain">|</code>
</div>
<div class="line number12 index11 alt1">
<code class="sql comments">-------------------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number13 index12 alt2">
<code class="sql plain">| 0 | </code><code class="sql keyword">SELECT</code> <code class="sql plain">STATEMENT REMOTE | | 50 | 6450 | 103 (0)| 00:00:01 | | |</code>
</div>
<div class="line number14 index13 alt1">
<code class="sql plain">| 1 | NESTED LOOPS | | 50 | 6450 | 103 (0)| 00:00:01 | | |</code>
</div>
<div class="line number15 index14 alt2">
<code class="sql plain">| 2 | NESTED LOOPS | | 50 | 6450 | 103 (0)| 00:00:01 | | |</code>
</div>
<div class="line number16 index15 alt1">
<code class="sql plain">| 3 | REMOTE | T_LOCAL | 50 | 3300 | 3 (0)| 00:00:01 | ! | R->S |</code>
</div>
<div class="line number17 index16 alt2">
<code class="sql plain">|* 4 | </code><code class="sql keyword">INDEX</code> <code class="sql plain">RANGE SCAN | T_REMOTE_I02 | 1 | | 1 (0)| 00:00:01 | ORA12C | |</code>
</div>
<div class="line number18 index17 alt1">
<code class="sql plain">| 5 | </code><code class="sql keyword">TABLE</code> <code class="sql plain">ACCESS </code><code class="sql keyword">BY</code> <code class="sql keyword">INDEX</code> <code class="sql plain">ROWID| T_REMOTE | 1 | 63 | 2 (0)| 00:00:01 | ORA12C | |</code>
</div>
<div class="line number19 index18 alt2">
<code class="sql comments">-------------------------------------------------------------------------------------------------------------</code>
</div>
<div class="line number20 index19 alt1">
<code class="sql plain">Predicate Information (identified </code><code class="sql keyword">by</code> <code class="sql plain">operation id):</code>
</div>
<div class="line number21 index20 alt2">
<code class="sql comments">---------------------------------------------------</code>
</div>
<div class="line number22 index21 alt1">
<code class="sql spaces"> </code><code class="sql plain">4 - access(</code><code class="sql string">"A2"</code><code class="sql plain">.</code><code class="sql string">"COL02"</code><code class="sql plain">=</code><code class="sql string">"A1"</code><code class="sql plain">.</code><code class="sql string">"COL02"</code><code class="sql plain">)</code>
</div>
<div class="line number23 index22 alt2">
<code class="sql plain">Remote SQL Information (identified </code><code class="sql keyword">by</code> <code class="sql plain">operation id):</code>
</div>
<div class="line number24 index23 alt1">
<code class="sql comments">----------------------------------------------------</code>
</div>
<div class="line number25 index24 alt2">
<code class="sql spaces"> </code><code class="sql plain">3 - </code><code class="sql keyword">SELECT</code> <code class="sql string">"COL02"</code><code class="sql plain">,</code><code class="sql string">"COL04"</code><code class="sql plain">,</code><code class="sql string">"COL05"</code><code class="sql plain">,</code><code class="sql string">"COL06"</code> <code class="sql keyword">FROM</code> <code class="sql string">"T_LOCAL"</code> <code class="sql string">"A2"</code> <code class="sql plain">(accessing </code><code class="sql string">'!'</code> <code class="sql plain">)</code>
</div>
<div class="line number26 index25 alt1">
<code class="sql plain">Note</code>
</div>
<div class="line number27 index26 alt2">
<code class="sql comments">-----</code>
</div>
<div class="line number28 index27 alt1">
<code class="sql spaces"> </code><code class="sql plain">- fully remote statement</code>
</div>
<div class="line number29 index28 alt2">
<code class="sql spaces"> </code><code class="sql plain">- this </code><code class="sql keyword">is</code> <code class="sql plain">an adaptive plan</code>
</div>
<div class="line number30 index29 alt1">
<code class="sql keyword">Statistics</code>
</div>
<div class="line number31 index30 alt2">
<code class="sql comments">----------------------------------------------------------</code>
</div>
<div class="line number32 index31 alt1">
<code class="sql spaces"> </code><code class="sql plain">137 recursive calls</code>
</div>
<div class="line number33 index32 alt2">
<code class="sql spaces"> </code><code class="sql plain">0 db block gets</code>
</div>
<div class="line number34 index33 alt1">
<code class="sql spaces"> </code><code class="sql plain">213 consistent gets</code>
</div>
<div class="line number35 index34 alt2">
<code class="sql spaces"> </code><code class="sql plain">25 physical reads</code>
</div>
<div class="line number36 index35 alt1">
<code class="sql spaces"> </code><code class="sql plain">0 redo </code><code class="sql keyword">size</code>
</div>
<div class="line number37 index36 alt2">
<code class="sql spaces"> </code><code class="sql plain">2940 bytes sent via SQL*Net </code><code class="sql keyword">to</code> <code class="sql plain">client</code>
</div>
<div class="line number38 index37 alt1">
<code class="sql spaces"> </code><code class="sql plain">641 bytes received via SQL*Net </code><code class="sql keyword">from</code> <code class="sql plain">client</code>
</div>
<div class="line number39 index38 alt2">
<code class="sql spaces"> </code><code class="sql plain">5 SQL*Net roundtrips </code><code class="sql keyword">to</code><code class="sql plain">/</code><code class="sql keyword">from</code> <code class="sql plain">client</code>
</div>
<div class="line number40 index39 alt1">
<code class="sql spaces"> </code><code class="sql plain">10 sorts (memory)</code>
</div>
<div class="line number41 index40 alt2">
<code class="sql spaces"> </code><code class="sql plain">0 sorts (disk)</code>
</div>
<div class="line number42 index41 alt1">
<code class="sql spaces"> </code><code class="sql plain">50 </code><code class="sql keyword">rows</code> <code class="sql plain">processed</code>
</div>
<div class="line number43 index42 alt2">
<code class="sql plain">SQL></code>
</div>
<div class="line number44 index43 alt1">
<code class="sql comments">--可以看到本地表是走全表扫,但是远程表使用了第2个字段的索引。</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
<span><span><strong>总结</strong></span></span></p>
<p>
以上就是本文关于远程数据库的表超过20个索引的影响详细解析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:SQL提取数据库表名及字段名等信息代码示例、MySQL数据库表分区注意事项大全【推荐】等,有什么问题可以直接留言,小编会及时回复大家的。感谢朋友们对本站的支持!</p>
<p>
原文链接:https://oracleblog.org/study-note/no-more-20-index-on-remote-database/#comments</p>
頁:
[1]