forked from docs/doc-exports
Reviewed-by: Pruthi, Vineet <vineet.pruthi@t-systems.com> Reviewed-by: Rechenburg, Matthias <matthias.rechenburg@t-systems.com> Co-authored-by: Lu, Huayi <luhuayi@huawei.com> Co-committed-by: Lu, Huayi <luhuayi@huawei.com>
815 lines
129 KiB
HTML
815 lines
129 KiB
HTML
<a name="EN-US_TOPIC_0000001462378445"></a><a name="EN-US_TOPIC_0000001462378445"></a>
|
|
|
|
<h1 class="topictitle1">Why Sometimes the GaussDB(DWS) Query Indexes Become Invalid?</h1>
|
|
<div id="body0000001462378445"><p id="EN-US_TOPIC_0000001462378445__p13353207101919">Creating indexes for tables can improve database query performance. However, sometimes indexes cannot be used in a query plan. This section describes several common reasons and optimization methods.</p>
|
|
<div class="section" id="EN-US_TOPIC_0000001462378445__section4507550159"><h4 class="sectiontitle">Reason 1: The Returned Result Sets Are Large.</h4><p id="EN-US_TOPIC_0000001462378445__p14406654544">The following uses Seq Scan and Index Scan on a row-store table as an example:</p>
|
|
<ul id="EN-US_TOPIC_0000001462378445__ul17461655182214"><li id="EN-US_TOPIC_0000001462378445__li17461255112213">Seq Scan: searches table records in sequence. All records are retrieved during each scan. This is the simplest and most basic table scanning method, and its cost is high.</li><li id="EN-US_TOPIC_0000001462378445__li2046125518224">Index Scan: searches the index first, find the target location (pointer) in the index, and then retrieve data on the target page.</li></ul>
|
|
<p id="EN-US_TOPIC_0000001462378445__p194066543416">Index scan is faster than sequence scan in most cases. However, if the obtained result sets account for a large proportion (more than 70%) of all data, Index Scan needs to scan indexes before reading table data. This makes it slower table scan.</p>
|
|
</div>
|
|
<div class="section" id="EN-US_TOPIC_0000001462378445__section5217447466"><h4 class="sectiontitle">Reason 2: ANALYZE Is Not Performed In a Timely Manner.</h4><p id="EN-US_TOPIC_0000001462378445__p463104653514"><strong id="EN-US_TOPIC_0000001462378445__b580434410259">ANALYZE</strong> is used to update table statistics. If <strong id="EN-US_TOPIC_0000001462378445__b16498634112416">ANALYZE</strong> is not executed on a table or a large amount of data is added to or deleted from a table after <strong id="EN-US_TOPIC_0000001462378445__b14997325299">ANALYZE</strong> is executed, the statistics may be inaccurate, which may cause a query to skip the index.</p>
|
|
<p id="EN-US_TOPIC_0000001462378445__p1140613544411">Optimization method: Run the <strong id="EN-US_TOPIC_0000001462378445__b14190163811249">ANALYZE</strong> statement on the table to update statistics.</p>
|
|
</div>
|
|
<div class="section" id="EN-US_TOPIC_0000001462378445__section464083183614"><h4 class="sectiontitle">Reason 3: Filtering Conditions Contains Functions or Implicit Data Type Conversion</h4><p id="EN-US_TOPIC_0000001462378445__p10104143383611">If calculation, function, or implicit data type conversion is contained in filter criteria, indexes may fail to be selected.</p>
|
|
<p id="EN-US_TOPIC_0000001462378445__p8935193774010">For example, when a table is created, indexes are created in columns <strong id="EN-US_TOPIC_0000001462378445__b16192833407">a</strong>, <strong id="EN-US_TOPIC_0000001462378445__b15762616402">b</strong>, and <strong id="EN-US_TOPIC_0000001462378445__b18727915405">c</strong>.</p>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001462378445__screen1434345124015"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">CREATE</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="n">test</span><span class="p">(</span><span class="n">a</span><span class="w"> </span><span class="nb">int</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="nb">text</span><span class="p">,</span><span class="w"> </span><span class="k">c</span><span class="w"> </span><span class="nb">date</span><span class="p">);</span><span class="w"> </span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
</div>
|
|
<ul id="EN-US_TOPIC_0000001462378445__ul1141818499410"><li id="EN-US_TOPIC_0000001462378445__li1541811491842">Perform calculation on the indexed columns.<p id="EN-US_TOPIC_0000001462378445__p1740755418411"><a name="EN-US_TOPIC_0000001462378445__li1541811491842"></a><a name="li1541811491842"></a>The following command output indicates that both <strong id="EN-US_TOPIC_0000001462378445__b168553813412">where a = 101</strong> and <strong id="EN-US_TOPIC_0000001462378445__b1611845154116">where a = 102 - 1</strong> use the index in column a, but <strong id="EN-US_TOPIC_0000001462378445__b1894187134214">where a + 1 = 102</strong> does not use the index.</p>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001462378445__screen377719108520"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
|
|
<span class="normal"> 2</span>
|
|
<span class="normal"> 3</span>
|
|
<span class="normal"> 4</span>
|
|
<span class="normal"> 5</span>
|
|
<span class="normal"> 6</span>
|
|
<span class="normal"> 7</span>
|
|
<span class="normal"> 8</span>
|
|
<span class="normal"> 9</span>
|
|
<span class="normal">10</span>
|
|
<span class="normal">11</span>
|
|
<span class="normal">12</span>
|
|
<span class="normal">13</span>
|
|
<span class="normal">14</span>
|
|
<span class="normal">15</span>
|
|
<span class="normal">16</span>
|
|
<span class="normal">17</span>
|
|
<span class="normal">18</span>
|
|
<span class="normal">19</span>
|
|
<span class="normal">20</span>
|
|
<span class="normal">21</span>
|
|
<span class="normal">22</span>
|
|
<span class="normal">23</span>
|
|
<span class="normal">24</span>
|
|
<span class="normal">25</span>
|
|
<span class="normal">26</span>
|
|
<span class="normal">27</span>
|
|
<span class="normal">28</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">explain</span><span class="w"> </span><span class="k">verbose</span><span class="w"> </span><span class="k">select</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">from</span><span class="w"> </span><span class="n">test</span><span class="w"> </span><span class="k">where</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">101</span><span class="p">;</span>
|
|
<span class="w"> </span><span class="n">QUERY</span><span class="w"> </span><span class="n">PLAN</span>
|
|
<span class="c1">------------------------------------------------------------------------------------------------------------</span>
|
|
<span class="w"> </span><span class="n">id</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="k">operation</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="k">rows</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="k">distinct</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="n">memory</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="n">width</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="n">costs</span>
|
|
<span class="w"> </span><span class="c1">----+------------------------------------------------+--------+------------+----------+---------+---------</span>
|
|
<span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="n">Streaming</span><span class="w"> </span><span class="p">(</span><span class="k">type</span><span class="p">:</span><span class="w"> </span><span class="n">GATHER</span><span class="p">)</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">44</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">16</span><span class="p">.</span><span class="mi">27</span>
|
|
<span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="k">Index</span><span class="w"> </span><span class="n">Scan</span><span class="w"> </span><span class="k">using</span><span class="w"> </span><span class="n">index_a</span><span class="w"> </span><span class="k">on</span><span class="w"> </span><span class="k">public</span><span class="p">.</span><span class="n">test</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">1</span><span class="n">MB</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">44</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">8</span><span class="p">.</span><span class="mi">27</span>
|
|
|
|
<span class="w"> </span><span class="n">Predicate</span><span class="w"> </span><span class="n">Information</span><span class="w"> </span><span class="p">(</span><span class="n">identified</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="n">plan</span><span class="w"> </span><span class="n">id</span><span class="p">)</span>
|
|
<span class="w"> </span><span class="c1">---------------------------------------------</span>
|
|
<span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="c1">--Index Scan using index_a on public.test</span>
|
|
<span class="w"> </span><span class="k">Index</span><span class="w"> </span><span class="n">Cond</span><span class="p">:</span><span class="w"> </span><span class="p">(</span><span class="n">test</span><span class="p">.</span><span class="n">a</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">101</span><span class="p">)</span>
|
|
|
|
<span class="w"> </span><span class="n">Targetlist</span><span class="w"> </span><span class="n">Information</span><span class="w"> </span><span class="p">(</span><span class="n">identified</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="n">plan</span><span class="w"> </span><span class="n">id</span><span class="p">)</span>
|
|
<span class="w"> </span><span class="c1">----------------------------------------------</span>
|
|
<span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="c1">--Streaming (type: GATHER)</span>
|
|
<span class="w"> </span><span class="k">Output</span><span class="p">:</span><span class="w"> </span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="p">,</span><span class="w"> </span><span class="k">c</span>
|
|
<span class="w"> </span><span class="n">Node</span><span class="o">/</span><span class="n">s</span><span class="p">:</span><span class="w"> </span><span class="n">dn_6005_6006</span>
|
|
<span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="c1">--Index Scan using index_a on public.test</span>
|
|
<span class="w"> </span><span class="k">Output</span><span class="p">:</span><span class="w"> </span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="p">,</span><span class="w"> </span><span class="k">c</span>
|
|
<span class="w"> </span><span class="n">Distribute</span><span class="w"> </span><span class="k">Key</span><span class="p">:</span><span class="w"> </span><span class="n">a</span>
|
|
|
|
<span class="w"> </span><span class="o">======</span><span class="w"> </span><span class="n">Query</span><span class="w"> </span><span class="n">Summary</span><span class="w"> </span><span class="o">=====</span>
|
|
<span class="w"> </span><span class="c1">-------------------------------</span>
|
|
<span class="w"> </span><span class="k">System</span><span class="w"> </span><span class="n">available</span><span class="w"> </span><span class="n">mem</span><span class="p">:</span><span class="w"> </span><span class="mi">3358720</span><span class="n">KB</span>
|
|
<span class="w"> </span><span class="n">Query</span><span class="w"> </span><span class="k">Max</span><span class="w"> </span><span class="n">mem</span><span class="p">:</span><span class="w"> </span><span class="mi">3358720</span><span class="n">KB</span>
|
|
<span class="w"> </span><span class="n">Query</span><span class="w"> </span><span class="n">estimated</span><span class="w"> </span><span class="n">mem</span><span class="p">:</span><span class="w"> </span><span class="mi">1024</span><span class="n">KB</span>
|
|
<span class="p">(</span><span class="mi">24</span><span class="w"> </span><span class="k">rows</span><span class="p">)</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001462378445__screen176310232519"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
|
|
<span class="normal"> 2</span>
|
|
<span class="normal"> 3</span>
|
|
<span class="normal"> 4</span>
|
|
<span class="normal"> 5</span>
|
|
<span class="normal"> 6</span>
|
|
<span class="normal"> 7</span>
|
|
<span class="normal"> 8</span>
|
|
<span class="normal"> 9</span>
|
|
<span class="normal">10</span>
|
|
<span class="normal">11</span>
|
|
<span class="normal">12</span>
|
|
<span class="normal">13</span>
|
|
<span class="normal">14</span>
|
|
<span class="normal">15</span>
|
|
<span class="normal">16</span>
|
|
<span class="normal">17</span>
|
|
<span class="normal">18</span>
|
|
<span class="normal">19</span>
|
|
<span class="normal">20</span>
|
|
<span class="normal">21</span>
|
|
<span class="normal">22</span>
|
|
<span class="normal">23</span>
|
|
<span class="normal">24</span>
|
|
<span class="normal">25</span>
|
|
<span class="normal">26</span>
|
|
<span class="normal">27</span>
|
|
<span class="normal">28</span></pre></div></td><td class="code"><div><pre><span></span><span class="w"> </span><span class="k">explain</span><span class="w"> </span><span class="k">verbose</span><span class="w"> </span><span class="k">select</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">from</span><span class="w"> </span><span class="n">test</span><span class="w"> </span><span class="k">where</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">102</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
|
|
<span class="w"> </span><span class="n">QUERY</span><span class="w"> </span><span class="n">PLAN</span>
|
|
<span class="c1">------------------------------------------------------------------------------------------------------------</span>
|
|
<span class="w"> </span><span class="n">id</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="k">operation</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="k">rows</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="k">distinct</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="n">memory</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="n">width</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="n">costs</span>
|
|
<span class="w"> </span><span class="c1">----+------------------------------------------------+--------+------------+----------+---------+---------</span>
|
|
<span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="n">Streaming</span><span class="w"> </span><span class="p">(</span><span class="k">type</span><span class="p">:</span><span class="w"> </span><span class="n">GATHER</span><span class="p">)</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">44</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">16</span><span class="p">.</span><span class="mi">27</span>
|
|
<span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="k">Index</span><span class="w"> </span><span class="n">Scan</span><span class="w"> </span><span class="k">using</span><span class="w"> </span><span class="n">index_a</span><span class="w"> </span><span class="k">on</span><span class="w"> </span><span class="k">public</span><span class="p">.</span><span class="n">test</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">1</span><span class="n">MB</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">44</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">8</span><span class="p">.</span><span class="mi">27</span>
|
|
|
|
<span class="w"> </span><span class="n">Predicate</span><span class="w"> </span><span class="n">Information</span><span class="w"> </span><span class="p">(</span><span class="n">identified</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="n">plan</span><span class="w"> </span><span class="n">id</span><span class="p">)</span>
|
|
<span class="w"> </span><span class="c1">---------------------------------------------</span>
|
|
<span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="c1">--Index Scan using index_a on public.test</span>
|
|
<span class="w"> </span><span class="k">Index</span><span class="w"> </span><span class="n">Cond</span><span class="p">:</span><span class="w"> </span><span class="p">(</span><span class="n">test</span><span class="p">.</span><span class="n">a</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">101</span><span class="p">)</span>
|
|
|
|
<span class="w"> </span><span class="n">Targetlist</span><span class="w"> </span><span class="n">Information</span><span class="w"> </span><span class="p">(</span><span class="n">identified</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="n">plan</span><span class="w"> </span><span class="n">id</span><span class="p">)</span>
|
|
<span class="w"> </span><span class="c1">----------------------------------------------</span>
|
|
<span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="c1">--Streaming (type: GATHER)</span>
|
|
<span class="w"> </span><span class="k">Output</span><span class="p">:</span><span class="w"> </span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="p">,</span><span class="w"> </span><span class="k">c</span>
|
|
<span class="w"> </span><span class="n">Node</span><span class="o">/</span><span class="n">s</span><span class="p">:</span><span class="w"> </span><span class="n">dn_6005_6006</span>
|
|
<span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="c1">--Index Scan using index_a on public.test</span>
|
|
<span class="w"> </span><span class="k">Output</span><span class="p">:</span><span class="w"> </span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="p">,</span><span class="w"> </span><span class="k">c</span>
|
|
<span class="w"> </span><span class="n">Distribute</span><span class="w"> </span><span class="k">Key</span><span class="p">:</span><span class="w"> </span><span class="n">a</span>
|
|
|
|
<span class="w"> </span><span class="o">======</span><span class="w"> </span><span class="n">Query</span><span class="w"> </span><span class="n">Summary</span><span class="w"> </span><span class="o">=====</span>
|
|
<span class="w"> </span><span class="c1">-------------------------------</span>
|
|
<span class="w"> </span><span class="k">System</span><span class="w"> </span><span class="n">available</span><span class="w"> </span><span class="n">mem</span><span class="p">:</span><span class="w"> </span><span class="mi">3358720</span><span class="n">KB</span>
|
|
<span class="w"> </span><span class="n">Query</span><span class="w"> </span><span class="k">Max</span><span class="w"> </span><span class="n">mem</span><span class="p">:</span><span class="w"> </span><span class="mi">3358720</span><span class="n">KB</span>
|
|
<span class="w"> </span><span class="n">Query</span><span class="w"> </span><span class="n">estimated</span><span class="w"> </span><span class="n">mem</span><span class="p">:</span><span class="w"> </span><span class="mi">1024</span><span class="n">KB</span>
|
|
<span class="p">(</span><span class="mi">24</span><span class="w"> </span><span class="k">rows</span><span class="p">)</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001462378445__screen147716561149"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
|
|
<span class="normal"> 2</span>
|
|
<span class="normal"> 3</span>
|
|
<span class="normal"> 4</span>
|
|
<span class="normal"> 5</span>
|
|
<span class="normal"> 6</span>
|
|
<span class="normal"> 7</span>
|
|
<span class="normal"> 8</span>
|
|
<span class="normal"> 9</span>
|
|
<span class="normal">10</span>
|
|
<span class="normal">11</span>
|
|
<span class="normal">12</span>
|
|
<span class="normal">13</span>
|
|
<span class="normal">14</span>
|
|
<span class="normal">15</span>
|
|
<span class="normal">16</span>
|
|
<span class="normal">17</span>
|
|
<span class="normal">18</span>
|
|
<span class="normal">19</span>
|
|
<span class="normal">20</span>
|
|
<span class="normal">21</span>
|
|
<span class="normal">22</span>
|
|
<span class="normal">23</span>
|
|
<span class="normal">24</span>
|
|
<span class="normal">25</span>
|
|
<span class="normal">26</span>
|
|
<span class="normal">27</span>
|
|
<span class="normal">28</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">explain</span><span class="w"> </span><span class="k">verbose</span><span class="w"> </span><span class="k">select</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">from</span><span class="w"> </span><span class="n">test</span><span class="w"> </span><span class="k">where</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">102</span><span class="p">;</span>
|
|
<span class="w"> </span><span class="n">QUERY</span><span class="w"> </span><span class="n">PLAN</span>
|
|
<span class="c1">--------------------------------------------------------------------------------------------</span>
|
|
<span class="w"> </span><span class="n">id</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="k">operation</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="k">rows</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="k">distinct</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="n">memory</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="n">width</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="n">costs</span>
|
|
<span class="w"> </span><span class="c1">----+--------------------------------+--------+------------+----------+---------+---------</span>
|
|
<span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="n">Streaming</span><span class="w"> </span><span class="p">(</span><span class="k">type</span><span class="p">:</span><span class="w"> </span><span class="n">GATHER</span><span class="p">)</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">44</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">22</span><span class="p">.</span><span class="mi">21</span>
|
|
<span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="n">Seq</span><span class="w"> </span><span class="n">Scan</span><span class="w"> </span><span class="k">on</span><span class="w"> </span><span class="k">public</span><span class="p">.</span><span class="n">test</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">1</span><span class="n">MB</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">44</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">14</span><span class="p">.</span><span class="mi">21</span>
|
|
|
|
<span class="w"> </span><span class="n">Predicate</span><span class="w"> </span><span class="n">Information</span><span class="w"> </span><span class="p">(</span><span class="n">identified</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="n">plan</span><span class="w"> </span><span class="n">id</span><span class="p">)</span>
|
|
<span class="w"> </span><span class="c1">---------------------------------------------</span>
|
|
<span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="c1">--Seq Scan on public.test</span>
|
|
<span class="w"> </span><span class="n">Filter</span><span class="p">:</span><span class="w"> </span><span class="p">((</span><span class="n">test</span><span class="p">.</span><span class="n">a</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">102</span><span class="p">)</span>
|
|
|
|
<span class="w"> </span><span class="n">Targetlist</span><span class="w"> </span><span class="n">Information</span><span class="w"> </span><span class="p">(</span><span class="n">identified</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="n">plan</span><span class="w"> </span><span class="n">id</span><span class="p">)</span>
|
|
<span class="w"> </span><span class="c1">----------------------------------------------</span>
|
|
<span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="c1">--Streaming (type: GATHER)</span>
|
|
<span class="w"> </span><span class="k">Output</span><span class="p">:</span><span class="w"> </span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="p">,</span><span class="w"> </span><span class="k">c</span>
|
|
<span class="w"> </span><span class="n">Node</span><span class="o">/</span><span class="n">s</span><span class="p">:</span><span class="w"> </span><span class="k">All</span><span class="w"> </span><span class="n">datanodes</span>
|
|
<span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="c1">--Seq Scan on public.test</span>
|
|
<span class="w"> </span><span class="k">Output</span><span class="p">:</span><span class="w"> </span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="p">,</span><span class="w"> </span><span class="k">c</span>
|
|
<span class="w"> </span><span class="n">Distribute</span><span class="w"> </span><span class="k">Key</span><span class="p">:</span><span class="w"> </span><span class="n">a</span>
|
|
|
|
<span class="w"> </span><span class="o">======</span><span class="w"> </span><span class="n">Query</span><span class="w"> </span><span class="n">Summary</span><span class="w"> </span><span class="o">=====</span>
|
|
<span class="w"> </span><span class="c1">-------------------------------</span>
|
|
<span class="w"> </span><span class="k">System</span><span class="w"> </span><span class="n">available</span><span class="w"> </span><span class="n">mem</span><span class="p">:</span><span class="w"> </span><span class="mi">3358720</span><span class="n">KB</span>
|
|
<span class="w"> </span><span class="n">Query</span><span class="w"> </span><span class="k">Max</span><span class="w"> </span><span class="n">mem</span><span class="p">:</span><span class="w"> </span><span class="mi">3358720</span><span class="n">KB</span>
|
|
<span class="w"> </span><span class="n">Query</span><span class="w"> </span><span class="n">estimated</span><span class="w"> </span><span class="n">mem</span><span class="p">:</span><span class="w"> </span><span class="mi">1024</span><span class="n">KB</span>
|
|
<span class="p">(</span><span class="mi">24</span><span class="w"> </span><span class="k">rows</span><span class="p">)</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
<p id="EN-US_TOPIC_0000001462378445__p104083549418">Optimization method: Use constants instead of expressions, or put constant calculation on the right of the equal sign (=).</p>
|
|
</li></ul>
|
|
<ul id="EN-US_TOPIC_0000001462378445__ul628824816232"><li id="EN-US_TOPIC_0000001462378445__li122885483233">Use functions on indexed columns.<p id="EN-US_TOPIC_0000001462378445__p1540812541747"><a name="EN-US_TOPIC_0000001462378445__li122885483233"></a><a name="li122885483233"></a>According to the following execution result, if a function is used on an indexed column, the index fails to be selected.</p>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001462378445__screen108776491553"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
|
|
<span class="normal"> 2</span>
|
|
<span class="normal"> 3</span>
|
|
<span class="normal"> 4</span>
|
|
<span class="normal"> 5</span>
|
|
<span class="normal"> 6</span>
|
|
<span class="normal"> 7</span>
|
|
<span class="normal"> 8</span>
|
|
<span class="normal"> 9</span>
|
|
<span class="normal">10</span>
|
|
<span class="normal">11</span>
|
|
<span class="normal">12</span>
|
|
<span class="normal">13</span>
|
|
<span class="normal">14</span>
|
|
<span class="normal">15</span>
|
|
<span class="normal">16</span>
|
|
<span class="normal">17</span>
|
|
<span class="normal">18</span>
|
|
<span class="normal">19</span>
|
|
<span class="normal">20</span>
|
|
<span class="normal">21</span>
|
|
<span class="normal">22</span>
|
|
<span class="normal">23</span>
|
|
<span class="normal">24</span>
|
|
<span class="normal">25</span>
|
|
<span class="normal">26</span>
|
|
<span class="normal">27</span>
|
|
<span class="normal">28</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">explain</span><span class="w"> </span><span class="k">verbose</span><span class="w"> </span><span class="k">select</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">from</span><span class="w"> </span><span class="n">test</span><span class="w"> </span><span class="k">where</span><span class="w"> </span><span class="n">to_char</span><span class="p">(</span><span class="k">c</span><span class="p">,</span><span class="w"> </span><span class="s1">'yyyyMMdd'</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">to_char</span><span class="p">(</span><span class="k">CURRENT_DATE</span><span class="p">,</span><span class="s1">'yyyyMMdd'</span><span class="p">);</span>
|
|
<span class="w"> </span><span class="n">QUERY</span><span class="w"> </span><span class="n">PLAN</span>
|
|
<span class="c1">--------------------------------------------------------------------------------------------------------------------------------------------</span>
|
|
<span class="w"> </span><span class="n">id</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="k">operation</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="k">rows</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="k">distinct</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="n">memory</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="n">width</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="n">costs</span>
|
|
<span class="w"> </span><span class="c1">----+--------------------------------+--------+------------+----------+---------+---------</span>
|
|
<span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="n">Streaming</span><span class="w"> </span><span class="p">(</span><span class="k">type</span><span class="p">:</span><span class="w"> </span><span class="n">GATHER</span><span class="p">)</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">44</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">22</span><span class="p">.</span><span class="mi">28</span>
|
|
<span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="n">Seq</span><span class="w"> </span><span class="n">Scan</span><span class="w"> </span><span class="k">on</span><span class="w"> </span><span class="k">public</span><span class="p">.</span><span class="n">test</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">1</span><span class="n">MB</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">44</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">14</span><span class="p">.</span><span class="mi">28</span>
|
|
|
|
<span class="w"> </span><span class="n">Predicate</span><span class="w"> </span><span class="n">Information</span><span class="w"> </span><span class="p">(</span><span class="n">identified</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="n">plan</span><span class="w"> </span><span class="n">id</span><span class="p">)</span>
|
|
<span class="w"> </span><span class="c1">------------------------------------------------------------------------------------------------------------------------------------------</span>
|
|
<span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="c1">--Seq Scan on public.test</span>
|
|
<span class="w"> </span><span class="n">Filter</span><span class="p">:</span><span class="w"> </span><span class="p">(</span><span class="n">to_char</span><span class="p">(</span><span class="n">test</span><span class="p">.</span><span class="k">c</span><span class="p">,</span><span class="w"> </span><span class="s1">'yyyyMMdd'</span><span class="p">::</span><span class="nb">text</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">to_char</span><span class="p">((</span><span class="s1">'2022-11-30'</span><span class="p">::</span><span class="n">pg_catalog</span><span class="p">.</span><span class="nb">date</span><span class="p">)::</span><span class="k">timestamp</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="k">time</span><span class="w"> </span><span class="k">zone</span><span class="p">,</span><span class="w"> </span><span class="s1">'yyyyMMdd'</span><span class="p">::</span><span class="nb">text</span><span class="p">))</span>
|
|
|
|
<span class="w"> </span><span class="n">Targetlist</span><span class="w"> </span><span class="n">Information</span><span class="w"> </span><span class="p">(</span><span class="n">identified</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="n">plan</span><span class="w"> </span><span class="n">id</span><span class="p">)</span>
|
|
<span class="w"> </span><span class="c1">----------------------------------------------</span>
|
|
<span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="c1">--Streaming (type: GATHER)</span>
|
|
<span class="w"> </span><span class="k">Output</span><span class="p">:</span><span class="w"> </span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="p">,</span><span class="w"> </span><span class="k">c</span>
|
|
<span class="w"> </span><span class="n">Node</span><span class="o">/</span><span class="n">s</span><span class="p">:</span><span class="w"> </span><span class="k">All</span><span class="w"> </span><span class="n">datanodes</span>
|
|
<span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="c1">--Seq Scan on public.test</span>
|
|
<span class="w"> </span><span class="k">Output</span><span class="p">:</span><span class="w"> </span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="p">,</span><span class="w"> </span><span class="k">c</span>
|
|
<span class="w"> </span><span class="n">Distribute</span><span class="w"> </span><span class="k">Key</span><span class="p">:</span><span class="w"> </span><span class="n">a</span>
|
|
|
|
<span class="w"> </span><span class="o">======</span><span class="w"> </span><span class="n">Query</span><span class="w"> </span><span class="n">Summary</span><span class="w"> </span><span class="o">=====</span>
|
|
<span class="w"> </span><span class="c1">-------------------------------</span>
|
|
<span class="w"> </span><span class="k">System</span><span class="w"> </span><span class="n">available</span><span class="w"> </span><span class="n">mem</span><span class="p">:</span><span class="w"> </span><span class="mi">3358720</span><span class="n">KB</span>
|
|
<span class="w"> </span><span class="n">Query</span><span class="w"> </span><span class="k">Max</span><span class="w"> </span><span class="n">mem</span><span class="p">:</span><span class="w"> </span><span class="mi">3358720</span><span class="n">KB</span>
|
|
<span class="w"> </span><span class="n">Query</span><span class="w"> </span><span class="n">estimated</span><span class="w"> </span><span class="n">mem</span><span class="p">:</span><span class="w"> </span><span class="mi">1024</span><span class="n">KB</span>
|
|
<span class="p">(</span><span class="mi">24</span><span class="w"> </span><span class="k">rows</span><span class="p">)</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001462378445__screen397121118274"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
|
|
<span class="normal"> 2</span>
|
|
<span class="normal"> 3</span>
|
|
<span class="normal"> 4</span>
|
|
<span class="normal"> 5</span>
|
|
<span class="normal"> 6</span>
|
|
<span class="normal"> 7</span>
|
|
<span class="normal"> 8</span>
|
|
<span class="normal"> 9</span>
|
|
<span class="normal">10</span>
|
|
<span class="normal">11</span>
|
|
<span class="normal">12</span>
|
|
<span class="normal">13</span>
|
|
<span class="normal">14</span>
|
|
<span class="normal">15</span>
|
|
<span class="normal">16</span>
|
|
<span class="normal">17</span>
|
|
<span class="normal">18</span>
|
|
<span class="normal">19</span>
|
|
<span class="normal">20</span>
|
|
<span class="normal">21</span>
|
|
<span class="normal">22</span>
|
|
<span class="normal">23</span>
|
|
<span class="normal">24</span>
|
|
<span class="normal">25</span>
|
|
<span class="normal">26</span>
|
|
<span class="normal">27</span>
|
|
<span class="normal">28</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">explain</span><span class="w"> </span><span class="k">verbose</span><span class="w"> </span><span class="k">select</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">from</span><span class="w"> </span><span class="n">test</span><span class="w"> </span><span class="k">where</span><span class="w"> </span><span class="k">c</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">current_date</span><span class="p">;</span>
|
|
<span class="w"> </span><span class="n">QUERY</span><span class="w"> </span><span class="n">PLAN</span>
|
|
<span class="c1">------------------------------------------------------------------------------------------------------------</span>
|
|
<span class="w"> </span><span class="n">id</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="k">operation</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="k">rows</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="k">distinct</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="n">memory</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="n">width</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="n">costs</span>
|
|
<span class="w"> </span><span class="c1">----+------------------------------------------------+--------+------------+----------+---------+---------</span>
|
|
<span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="n">Streaming</span><span class="w"> </span><span class="p">(</span><span class="k">type</span><span class="p">:</span><span class="w"> </span><span class="n">GATHER</span><span class="p">)</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">44</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">16</span><span class="p">.</span><span class="mi">27</span>
|
|
<span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="k">Index</span><span class="w"> </span><span class="n">Scan</span><span class="w"> </span><span class="k">using</span><span class="w"> </span><span class="n">index_c</span><span class="w"> </span><span class="k">on</span><span class="w"> </span><span class="k">public</span><span class="p">.</span><span class="n">test</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">1</span><span class="n">MB</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">44</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">8</span><span class="p">.</span><span class="mi">27</span>
|
|
|
|
<span class="w"> </span><span class="n">Predicate</span><span class="w"> </span><span class="n">Information</span><span class="w"> </span><span class="p">(</span><span class="n">identified</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="n">plan</span><span class="w"> </span><span class="n">id</span><span class="p">)</span>
|
|
<span class="w"> </span><span class="c1">------------------------------------------------------------</span>
|
|
<span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="c1">--Index Scan using index_c on public.test</span>
|
|
<span class="w"> </span><span class="k">Index</span><span class="w"> </span><span class="n">Cond</span><span class="p">:</span><span class="w"> </span><span class="p">(</span><span class="n">test</span><span class="p">.</span><span class="k">c</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'2022-11-30'</span><span class="p">::</span><span class="n">pg_catalog</span><span class="p">.</span><span class="nb">date</span><span class="p">)</span>
|
|
|
|
<span class="w"> </span><span class="n">Targetlist</span><span class="w"> </span><span class="n">Information</span><span class="w"> </span><span class="p">(</span><span class="n">identified</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="n">plan</span><span class="w"> </span><span class="n">id</span><span class="p">)</span>
|
|
<span class="w"> </span><span class="c1">----------------------------------------------</span>
|
|
<span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="c1">--Streaming (type: GATHER)</span>
|
|
<span class="w"> </span><span class="k">Output</span><span class="p">:</span><span class="w"> </span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="p">,</span><span class="w"> </span><span class="k">c</span>
|
|
<span class="w"> </span><span class="n">Node</span><span class="o">/</span><span class="n">s</span><span class="p">:</span><span class="w"> </span><span class="k">All</span><span class="w"> </span><span class="n">datanodes</span>
|
|
<span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="c1">--Index Scan using index_c on public.test</span>
|
|
<span class="w"> </span><span class="k">Output</span><span class="p">:</span><span class="w"> </span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="p">,</span><span class="w"> </span><span class="k">c</span>
|
|
<span class="w"> </span><span class="n">Distribute</span><span class="w"> </span><span class="k">Key</span><span class="p">:</span><span class="w"> </span><span class="n">a</span>
|
|
|
|
<span class="w"> </span><span class="o">======</span><span class="w"> </span><span class="n">Query</span><span class="w"> </span><span class="n">Summary</span><span class="w"> </span><span class="o">=====</span>
|
|
<span class="w"> </span><span class="c1">-------------------------------</span>
|
|
<span class="w"> </span><span class="k">System</span><span class="w"> </span><span class="n">available</span><span class="w"> </span><span class="n">mem</span><span class="p">:</span><span class="w"> </span><span class="mi">3358720</span><span class="n">KB</span>
|
|
<span class="w"> </span><span class="n">Query</span><span class="w"> </span><span class="k">Max</span><span class="w"> </span><span class="n">mem</span><span class="p">:</span><span class="w"> </span><span class="mi">3358720</span><span class="n">KB</span>
|
|
<span class="w"> </span><span class="n">Query</span><span class="w"> </span><span class="n">estimated</span><span class="w"> </span><span class="n">mem</span><span class="p">:</span><span class="w"> </span><span class="mi">1024</span><span class="n">KB</span>
|
|
<span class="p">(</span><span class="mi">24</span><span class="w"> </span><span class="k">rows</span><span class="p">)</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
<p id="EN-US_TOPIC_0000001462378445__p440813541849">Optimization method: Do not use unnecessary functions on indexed columns.</p>
|
|
</li><li id="EN-US_TOPIC_0000001462378445__li1374334142712">Implicit conversion of data types.<p id="EN-US_TOPIC_0000001462378445__p340995410418"><a name="EN-US_TOPIC_0000001462378445__li1374334142712"></a><a name="li1374334142712"></a>This scenario is common. For example, the type of column <strong id="EN-US_TOPIC_0000001462378445__b250016284464">b</strong> is Text, and the filtering condition is <strong id="EN-US_TOPIC_0000001462378445__b7639104218462">where b = 2</strong>. During plan generation, the Text type is implicitly converted to the Bigint type, and the actual filtering condition changes to <strong id="EN-US_TOPIC_0000001462378445__b847820710470">where b::bigint = 2</strong>. As a result, the index in column <strong id="EN-US_TOPIC_0000001462378445__b17913151734717">b</strong> becomes invalid.</p>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001462378445__screen154161913668"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
|
|
<span class="normal"> 2</span>
|
|
<span class="normal"> 3</span>
|
|
<span class="normal"> 4</span>
|
|
<span class="normal"> 5</span>
|
|
<span class="normal"> 6</span>
|
|
<span class="normal"> 7</span>
|
|
<span class="normal"> 8</span>
|
|
<span class="normal"> 9</span>
|
|
<span class="normal">10</span>
|
|
<span class="normal">11</span>
|
|
<span class="normal">12</span>
|
|
<span class="normal">13</span>
|
|
<span class="normal">14</span>
|
|
<span class="normal">15</span>
|
|
<span class="normal">16</span>
|
|
<span class="normal">17</span>
|
|
<span class="normal">18</span>
|
|
<span class="normal">19</span>
|
|
<span class="normal">20</span>
|
|
<span class="normal">21</span>
|
|
<span class="normal">22</span>
|
|
<span class="normal">23</span>
|
|
<span class="normal">24</span>
|
|
<span class="normal">25</span>
|
|
<span class="normal">26</span>
|
|
<span class="normal">27</span>
|
|
<span class="normal">28</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">explain</span><span class="w"> </span><span class="k">verbose</span><span class="w"> </span><span class="k">select</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">from</span><span class="w"> </span><span class="n">test</span><span class="w"> </span><span class="k">where</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span>
|
|
<span class="w"> </span><span class="n">QUERY</span><span class="w"> </span><span class="n">PLAN</span>
|
|
<span class="c1">--------------------------------------------------------------------------------------------</span>
|
|
<span class="w"> </span><span class="n">id</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="k">operation</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="k">rows</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="k">distinct</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="n">memory</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="n">width</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="n">costs</span>
|
|
<span class="w"> </span><span class="c1">----+--------------------------------+--------+------------+----------+---------+---------</span>
|
|
<span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="n">Streaming</span><span class="w"> </span><span class="p">(</span><span class="k">type</span><span class="p">:</span><span class="w"> </span><span class="n">GATHER</span><span class="p">)</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">44</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">22</span><span class="p">.</span><span class="mi">21</span>
|
|
<span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="n">Seq</span><span class="w"> </span><span class="n">Scan</span><span class="w"> </span><span class="k">on</span><span class="w"> </span><span class="k">public</span><span class="p">.</span><span class="n">test</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">1</span><span class="n">MB</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">44</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">14</span><span class="p">.</span><span class="mi">21</span>
|
|
|
|
<span class="w"> </span><span class="n">Predicate</span><span class="w"> </span><span class="n">Information</span><span class="w"> </span><span class="p">(</span><span class="n">identified</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="n">plan</span><span class="w"> </span><span class="n">id</span><span class="p">)</span>
|
|
<span class="w"> </span><span class="c1">---------------------------------------------</span>
|
|
<span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="c1">--Seq Scan on public.test</span>
|
|
<span class="w"> </span><span class="n">Filter</span><span class="p">:</span><span class="w"> </span><span class="p">((</span><span class="n">test</span><span class="p">.</span><span class="n">b</span><span class="p">)::</span><span class="nb">bigint</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">)</span>
|
|
|
|
<span class="w"> </span><span class="n">Targetlist</span><span class="w"> </span><span class="n">Information</span><span class="w"> </span><span class="p">(</span><span class="n">identified</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="n">plan</span><span class="w"> </span><span class="n">id</span><span class="p">)</span>
|
|
<span class="w"> </span><span class="c1">----------------------------------------------</span>
|
|
<span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="c1">--Streaming (type: GATHER)</span>
|
|
<span class="w"> </span><span class="k">Output</span><span class="p">:</span><span class="w"> </span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="p">,</span><span class="w"> </span><span class="k">c</span>
|
|
<span class="w"> </span><span class="n">Node</span><span class="o">/</span><span class="n">s</span><span class="p">:</span><span class="w"> </span><span class="k">All</span><span class="w"> </span><span class="n">datanodes</span>
|
|
<span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="c1">--Seq Scan on public.test</span>
|
|
<span class="w"> </span><span class="k">Output</span><span class="p">:</span><span class="w"> </span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="p">,</span><span class="w"> </span><span class="k">c</span>
|
|
<span class="w"> </span><span class="n">Distribute</span><span class="w"> </span><span class="k">Key</span><span class="p">:</span><span class="w"> </span><span class="n">a</span>
|
|
|
|
<span class="w"> </span><span class="o">======</span><span class="w"> </span><span class="n">Query</span><span class="w"> </span><span class="n">Summary</span><span class="w"> </span><span class="o">=====</span>
|
|
<span class="w"> </span><span class="c1">-------------------------------</span>
|
|
<span class="w"> </span><span class="k">System</span><span class="w"> </span><span class="n">available</span><span class="w"> </span><span class="n">mem</span><span class="p">:</span><span class="w"> </span><span class="mi">3358720</span><span class="n">KB</span>
|
|
<span class="w"> </span><span class="n">Query</span><span class="w"> </span><span class="k">Max</span><span class="w"> </span><span class="n">mem</span><span class="p">:</span><span class="w"> </span><span class="mi">3358720</span><span class="n">KB</span>
|
|
<span class="w"> </span><span class="n">Query</span><span class="w"> </span><span class="n">estimated</span><span class="w"> </span><span class="n">mem</span><span class="p">:</span><span class="w"> </span><span class="mi">1024</span><span class="n">KB</span>
|
|
<span class="p">(</span><span class="mi">24</span><span class="w"> </span><span class="k">rows</span><span class="p">)</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001462378445__screen059424782920"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
|
|
<span class="normal"> 2</span>
|
|
<span class="normal"> 3</span>
|
|
<span class="normal"> 4</span>
|
|
<span class="normal"> 5</span>
|
|
<span class="normal"> 6</span>
|
|
<span class="normal"> 7</span>
|
|
<span class="normal"> 8</span>
|
|
<span class="normal"> 9</span>
|
|
<span class="normal">10</span>
|
|
<span class="normal">11</span>
|
|
<span class="normal">12</span>
|
|
<span class="normal">13</span>
|
|
<span class="normal">14</span>
|
|
<span class="normal">15</span>
|
|
<span class="normal">16</span>
|
|
<span class="normal">17</span>
|
|
<span class="normal">18</span>
|
|
<span class="normal">19</span>
|
|
<span class="normal">20</span>
|
|
<span class="normal">21</span>
|
|
<span class="normal">22</span>
|
|
<span class="normal">23</span>
|
|
<span class="normal">24</span>
|
|
<span class="normal">25</span>
|
|
<span class="normal">26</span>
|
|
<span class="normal">27</span>
|
|
<span class="normal">28</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">explain</span><span class="w"> </span><span class="k">verbose</span><span class="w"> </span><span class="k">select</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">from</span><span class="w"> </span><span class="n">test</span><span class="w"> </span><span class="k">where</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'2'</span><span class="p">;</span>
|
|
<span class="w"> </span><span class="n">QUERY</span><span class="w"> </span><span class="n">PLAN</span>
|
|
<span class="c1">------------------------------------------------------------------------------------------------------------</span>
|
|
<span class="w"> </span><span class="n">id</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="k">operation</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="k">rows</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="k">distinct</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="n">memory</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="n">width</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="n">costs</span>
|
|
<span class="w"> </span><span class="c1">----+------------------------------------------------+--------+------------+----------+---------+---------</span>
|
|
<span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="n">Streaming</span><span class="w"> </span><span class="p">(</span><span class="k">type</span><span class="p">:</span><span class="w"> </span><span class="n">GATHER</span><span class="p">)</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">44</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">16</span><span class="p">.</span><span class="mi">27</span>
|
|
<span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="k">Index</span><span class="w"> </span><span class="n">Scan</span><span class="w"> </span><span class="k">using</span><span class="w"> </span><span class="n">index_b</span><span class="w"> </span><span class="k">on</span><span class="w"> </span><span class="k">public</span><span class="p">.</span><span class="n">test</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">1</span><span class="n">MB</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">44</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">8</span><span class="p">.</span><span class="mi">27</span>
|
|
|
|
<span class="w"> </span><span class="n">Predicate</span><span class="w"> </span><span class="n">Information</span><span class="w"> </span><span class="p">(</span><span class="n">identified</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="n">plan</span><span class="w"> </span><span class="n">id</span><span class="p">)</span>
|
|
<span class="w"> </span><span class="c1">---------------------------------------------</span>
|
|
<span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="c1">--Index Scan using index_b on public.test</span>
|
|
<span class="w"> </span><span class="k">Index</span><span class="w"> </span><span class="n">Cond</span><span class="p">:</span><span class="w"> </span><span class="p">(</span><span class="n">test</span><span class="p">.</span><span class="n">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'2'</span><span class="p">::</span><span class="nb">text</span><span class="p">)</span>
|
|
|
|
<span class="w"> </span><span class="n">Targetlist</span><span class="w"> </span><span class="n">Information</span><span class="w"> </span><span class="p">(</span><span class="n">identified</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="n">plan</span><span class="w"> </span><span class="n">id</span><span class="p">)</span>
|
|
<span class="w"> </span><span class="c1">----------------------------------------------</span>
|
|
<span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="c1">--Streaming (type: GATHER)</span>
|
|
<span class="w"> </span><span class="k">Output</span><span class="p">:</span><span class="w"> </span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="p">,</span><span class="w"> </span><span class="k">c</span>
|
|
<span class="w"> </span><span class="n">Node</span><span class="o">/</span><span class="n">s</span><span class="p">:</span><span class="w"> </span><span class="k">All</span><span class="w"> </span><span class="n">datanodes</span>
|
|
<span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="c1">--Index Scan using index_b on public.test</span>
|
|
<span class="w"> </span><span class="k">Output</span><span class="p">:</span><span class="w"> </span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="p">,</span><span class="w"> </span><span class="k">c</span>
|
|
<span class="w"> </span><span class="n">Distribute</span><span class="w"> </span><span class="k">Key</span><span class="p">:</span><span class="w"> </span><span class="n">a</span>
|
|
|
|
<span class="w"> </span><span class="o">======</span><span class="w"> </span><span class="n">Query</span><span class="w"> </span><span class="n">Summary</span><span class="w"> </span><span class="o">=====</span>
|
|
<span class="w"> </span><span class="c1">-------------------------------</span>
|
|
<span class="w"> </span><span class="k">System</span><span class="w"> </span><span class="n">available</span><span class="w"> </span><span class="n">mem</span><span class="p">:</span><span class="w"> </span><span class="mi">3358720</span><span class="n">KB</span>
|
|
<span class="w"> </span><span class="n">Query</span><span class="w"> </span><span class="k">Max</span><span class="w"> </span><span class="n">mem</span><span class="p">:</span><span class="w"> </span><span class="mi">3358720</span><span class="n">KB</span>
|
|
<span class="w"> </span><span class="n">Query</span><span class="w"> </span><span class="n">estimated</span><span class="w"> </span><span class="n">mem</span><span class="p">:</span><span class="w"> </span><span class="mi">1024</span><span class="n">KB</span>
|
|
<span class="p">(</span><span class="mi">24</span><span class="w"> </span><span class="k">rows</span><span class="p">)</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
<p id="EN-US_TOPIC_0000001462378445__p1841085419417">Optimization method: Use constants of the same type as the indexed column to avoid implicit type conversion.</p>
|
|
</li></ul>
|
|
<div class="section" id="EN-US_TOPIC_0000001462378445__section1394094318613"><h4 class="sectiontitle">Scenario 4: Hashjoin Is Replaced with Nestloop + Indexscan.</h4><p id="EN-US_TOPIC_0000001462378445__p21344474">When two tables are joined, the number of rows in the result set filtered by the WHERE condition in one table is small, thus the number of rows in the final result set is also small. In this case, the effect of nestloop+indexscan is better than that of hashjoin. The better execution plan is as follows:</p>
|
|
<p id="EN-US_TOPIC_0000001462378445__p1411165418418">You can see that the Index Cond: (t1.b = t2.b) at layer 5 has pushed the join condition down to the base table scanning.</p>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001462378445__screen21579251712"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
|
|
<span class="normal"> 2</span>
|
|
<span class="normal"> 3</span>
|
|
<span class="normal"> 4</span>
|
|
<span class="normal"> 5</span>
|
|
<span class="normal"> 6</span>
|
|
<span class="normal"> 7</span>
|
|
<span class="normal"> 8</span>
|
|
<span class="normal"> 9</span>
|
|
<span class="normal">10</span>
|
|
<span class="normal">11</span>
|
|
<span class="normal">12</span>
|
|
<span class="normal">13</span>
|
|
<span class="normal">14</span>
|
|
<span class="normal">15</span>
|
|
<span class="normal">16</span>
|
|
<span class="normal">17</span>
|
|
<span class="normal">18</span>
|
|
<span class="normal">19</span>
|
|
<span class="normal">20</span>
|
|
<span class="normal">21</span>
|
|
<span class="normal">22</span>
|
|
<span class="normal">23</span>
|
|
<span class="normal">24</span>
|
|
<span class="normal">25</span>
|
|
<span class="normal">26</span>
|
|
<span class="normal">27</span>
|
|
<span class="normal">28</span>
|
|
<span class="normal">29</span>
|
|
<span class="normal">30</span>
|
|
<span class="normal">31</span>
|
|
<span class="normal">32</span>
|
|
<span class="normal">33</span>
|
|
<span class="normal">34</span>
|
|
<span class="normal">35</span>
|
|
<span class="normal">36</span>
|
|
<span class="normal">37</span>
|
|
<span class="normal">38</span>
|
|
<span class="normal">39</span>
|
|
<span class="normal">40</span>
|
|
<span class="normal">41</span>
|
|
<span class="normal">42</span>
|
|
<span class="normal">43</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">explain</span><span class="w"> </span><span class="k">verbose</span><span class="w"> </span><span class="k">select</span><span class="w"> </span><span class="n">t1</span><span class="p">.</span><span class="n">a</span><span class="p">,</span><span class="n">t1</span><span class="p">.</span><span class="n">b</span><span class="w"> </span><span class="k">from</span><span class="w"> </span><span class="n">t1</span><span class="p">,</span><span class="n">t2</span><span class="w"> </span><span class="k">where</span><span class="w"> </span><span class="n">t1</span><span class="p">.</span><span class="n">b</span><span class="o">=</span><span class="n">t2</span><span class="p">.</span><span class="n">b</span><span class="w"> </span><span class="k">and</span><span class="w"> </span><span class="n">t2</span><span class="p">.</span><span class="n">a</span><span class="o">=</span><span class="mi">4</span><span class="p">;</span>
|
|
<span class="w"> </span><span class="n">id</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="k">operation</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="k">rows</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="k">distinct</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="n">memory</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="n">width</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="n">costs</span><span class="w"> </span>
|
|
<span class="c1">----+--------------------------------------------------+--------+------------+----------+---------+---------</span>
|
|
<span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="n">Streaming</span><span class="w"> </span><span class="p">(</span><span class="k">type</span><span class="p">:</span><span class="w"> </span><span class="n">GATHER</span><span class="p">)</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">26</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">8</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">17</span><span class="p">.</span><span class="mi">97</span>
|
|
<span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="n">Nested</span><span class="w"> </span><span class="n">Loop</span><span class="w"> </span><span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">5</span><span class="p">)</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">26</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">1</span><span class="n">MB</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">8</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">11</span><span class="p">.</span><span class="mi">97</span>
|
|
<span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="n">Streaming</span><span class="p">(</span><span class="k">type</span><span class="p">:</span><span class="w"> </span><span class="n">BROADCAST</span><span class="p">)</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">2</span><span class="n">MB</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">4</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">2</span><span class="p">.</span><span class="mi">78</span>
|
|
<span class="w"> </span><span class="mi">4</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="n">Seq</span><span class="w"> </span><span class="n">Scan</span><span class="w"> </span><span class="k">on</span><span class="w"> </span><span class="k">public</span><span class="p">.</span><span class="n">t2</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">1</span><span class="n">MB</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">4</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">2</span><span class="p">.</span><span class="mi">62</span>
|
|
<span class="w"> </span><span class="mi">5</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="k">Index</span><span class="w"> </span><span class="n">Scan</span><span class="w"> </span><span class="k">using</span><span class="w"> </span><span class="n">t1_b_idx</span><span class="w"> </span><span class="k">on</span><span class="w"> </span><span class="k">public</span><span class="p">.</span><span class="n">t1</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">26</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">1</span><span class="n">MB</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">8</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">9</span><span class="p">.</span><span class="mi">05</span>
|
|
<span class="p">(</span><span class="mi">5</span><span class="w"> </span><span class="k">rows</span><span class="p">)</span>
|
|
|
|
<span class="w"> </span><span class="n">Predicate</span><span class="w"> </span><span class="n">Information</span><span class="w"> </span><span class="p">(</span><span class="n">identified</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="n">plan</span><span class="w"> </span><span class="n">id</span><span class="p">)</span><span class="w"> </span>
|
|
<span class="c1">-----------------------------------------------</span>
|
|
<span class="w"> </span><span class="mi">4</span><span class="w"> </span><span class="c1">--Seq Scan on public.t2</span>
|
|
<span class="w"> </span><span class="n">Filter</span><span class="p">:</span><span class="w"> </span><span class="p">(</span><span class="n">t2</span><span class="p">.</span><span class="n">a</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">4</span><span class="p">)</span>
|
|
<span class="w"> </span><span class="mi">5</span><span class="w"> </span><span class="c1">--Index Scan using t1_b_idx on public.t1</span>
|
|
<span class="w"> </span><span class="k">Index</span><span class="w"> </span><span class="n">Cond</span><span class="p">:</span><span class="w"> </span><span class="p">(</span><span class="n">t1</span><span class="p">.</span><span class="n">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">t2</span><span class="p">.</span><span class="n">b</span><span class="p">)</span>
|
|
<span class="p">(</span><span class="mi">4</span><span class="w"> </span><span class="k">rows</span><span class="p">)</span>
|
|
|
|
<span class="w"> </span><span class="n">Targetlist</span><span class="w"> </span><span class="n">Information</span><span class="w"> </span><span class="p">(</span><span class="n">identified</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="n">plan</span><span class="w"> </span><span class="n">id</span><span class="p">)</span><span class="w"> </span>
|
|
<span class="c1">------------------------------------------------</span>
|
|
<span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="c1">--Streaming (type: GATHER)</span>
|
|
<span class="w"> </span><span class="k">Output</span><span class="p">:</span><span class="w"> </span><span class="n">t1</span><span class="p">.</span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">t1</span><span class="p">.</span><span class="n">b</span>
|
|
<span class="w"> </span><span class="n">Node</span><span class="o">/</span><span class="n">s</span><span class="p">:</span><span class="w"> </span><span class="k">All</span><span class="w"> </span><span class="n">datanodes</span>
|
|
<span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="c1">--Nested Loop (3,5)</span>
|
|
<span class="w"> </span><span class="k">Output</span><span class="p">:</span><span class="w"> </span><span class="n">t1</span><span class="p">.</span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">t1</span><span class="p">.</span><span class="n">b</span>
|
|
<span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="c1">--Streaming(type: BROADCAST)</span>
|
|
<span class="w"> </span><span class="k">Output</span><span class="p">:</span><span class="w"> </span><span class="n">t2</span><span class="p">.</span><span class="n">b</span>
|
|
<span class="w"> </span><span class="n">Spawn</span><span class="w"> </span><span class="k">on</span><span class="p">:</span><span class="w"> </span><span class="n">datanode2</span>
|
|
<span class="w"> </span><span class="n">Consumer</span><span class="w"> </span><span class="n">Nodes</span><span class="p">:</span><span class="w"> </span><span class="k">All</span><span class="w"> </span><span class="n">datanodes</span>
|
|
<span class="w"> </span><span class="mi">4</span><span class="w"> </span><span class="c1">--Seq Scan on public.t2</span>
|
|
<span class="w"> </span><span class="k">Output</span><span class="p">:</span><span class="w"> </span><span class="n">t2</span><span class="p">.</span><span class="n">b</span>
|
|
<span class="w"> </span><span class="n">Distribute</span><span class="w"> </span><span class="k">Key</span><span class="p">:</span><span class="w"> </span><span class="n">t2</span><span class="p">.</span><span class="n">a</span>
|
|
<span class="w"> </span><span class="mi">5</span><span class="w"> </span><span class="c1">--Index Scan using t1_b_idx on public.t1</span>
|
|
<span class="w"> </span><span class="k">Output</span><span class="p">:</span><span class="w"> </span><span class="n">t1</span><span class="p">.</span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">t1</span><span class="p">.</span><span class="n">b</span>
|
|
<span class="w"> </span><span class="n">Distribute</span><span class="w"> </span><span class="k">Key</span><span class="p">:</span><span class="w"> </span><span class="n">t1</span><span class="p">.</span><span class="n">a</span>
|
|
<span class="p">(</span><span class="mi">15</span><span class="w"> </span><span class="k">rows</span><span class="p">)</span>
|
|
|
|
<span class="w"> </span><span class="o">======</span><span class="w"> </span><span class="n">Query</span><span class="w"> </span><span class="n">Summary</span><span class="w"> </span><span class="o">=====</span><span class="w"> </span>
|
|
<span class="c1">---------------------------------</span>
|
|
<span class="w"> </span><span class="k">System</span><span class="w"> </span><span class="n">available</span><span class="w"> </span><span class="n">mem</span><span class="p">:</span><span class="w"> </span><span class="mi">9262694</span><span class="n">KB</span>
|
|
<span class="w"> </span><span class="n">Query</span><span class="w"> </span><span class="k">Max</span><span class="w"> </span><span class="n">mem</span><span class="p">:</span><span class="w"> </span><span class="mi">9471590</span><span class="n">KB</span>
|
|
<span class="w"> </span><span class="n">Query</span><span class="w"> </span><span class="n">estimated</span><span class="w"> </span><span class="n">mem</span><span class="p">:</span><span class="w"> </span><span class="mi">5144</span><span class="n">KB</span>
|
|
<span class="p">(</span><span class="mi">3</span><span class="w"> </span><span class="k">rows</span><span class="p">)</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
</div>
|
|
<p id="EN-US_TOPIC_0000001462378445__p1141218541341">If the optimizer does not select such an execution plan, you can optimize it as follows:</p>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001462378445__screen15479946572"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
|
|
<span class="normal">2</span>
|
|
<span class="normal">3</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">set</span><span class="w"> </span><span class="n">enable_index_nestloop</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">on</span><span class="p">;</span>
|
|
<span class="k">set</span><span class="w"> </span><span class="n">enable_hashjoin</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">off</span><span class="p">;</span>
|
|
<span class="k">set</span><span class="w"> </span><span class="n">enable_seqscan</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">off</span><span class="p">;</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
<div class="section" id="EN-US_TOPIC_0000001462378445__section10402209385"><h4 class="sectiontitle">Reason 5: The Scan Method Is Incorrectly Specified by Hints.</h4><p id="EN-US_TOPIC_0000001462378445__p1741211547413">GaussDB(DWS) plan hints can specify three scan method: tablescan, indexscan, and indexonlyscan.</p>
|
|
<ul id="EN-US_TOPIC_0000001462378445__ul179901423120"><li id="EN-US_TOPIC_0000001462378445__li29901543318">Table Scan: full table scan, such as Seq Scan of row-store tables and CStore Scan of column-store tables.</li><li id="EN-US_TOPIC_0000001462378445__li179901441316">Index Scan: scans indexes and then obtains table records based on the indexes.</li><li id="EN-US_TOPIC_0000001462378445__li399114410313">Index-Only Scan: scans indexes, which cover all required results. Compared with the index scan, the index-only scan covers all queried columns. In this way, only indexes are retrieved, and data records do not need to be retrieved.</li></ul>
|
|
<p id="EN-US_TOPIC_0000001462378445__p1641220543418">In Index-Only Scan scenarios, Index Scan specified by a hint will be invalid.</p>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001462378445__screen16358113816817"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
|
|
<span class="normal"> 2</span>
|
|
<span class="normal"> 3</span>
|
|
<span class="normal"> 4</span>
|
|
<span class="normal"> 5</span>
|
|
<span class="normal"> 6</span>
|
|
<span class="normal"> 7</span>
|
|
<span class="normal"> 8</span>
|
|
<span class="normal"> 9</span>
|
|
<span class="normal">10</span>
|
|
<span class="normal">11</span>
|
|
<span class="normal">12</span>
|
|
<span class="normal">13</span>
|
|
<span class="normal">14</span>
|
|
<span class="normal">15</span>
|
|
<span class="normal">16</span>
|
|
<span class="normal">17</span>
|
|
<span class="normal">18</span>
|
|
<span class="normal">19</span>
|
|
<span class="normal">20</span>
|
|
<span class="normal">21</span>
|
|
<span class="normal">22</span>
|
|
<span class="normal">23</span>
|
|
<span class="normal">24</span>
|
|
<span class="normal">25</span>
|
|
<span class="normal">26</span>
|
|
<span class="normal">27</span>
|
|
<span class="normal">28</span>
|
|
<span class="normal">29</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">explain</span><span class="w"> </span><span class="k">verbose</span><span class="w"> </span><span class="k">select</span><span class="cm">/*+ indexscan(test)*/</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="k">from</span><span class="w"> </span><span class="n">test</span><span class="w"> </span><span class="k">where</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'1'</span><span class="p">;</span>
|
|
<span class="n">WARNING</span><span class="p">:</span><span class="w"> </span><span class="n">unused</span><span class="w"> </span><span class="n">hint</span><span class="p">:</span><span class="w"> </span><span class="n">IndexScan</span><span class="p">(</span><span class="n">test</span><span class="p">)</span>
|
|
<span class="w"> </span><span class="n">QUERY</span><span class="w"> </span><span class="n">PLAN</span>
|
|
<span class="c1">-----------------------------------------------------------------------------------------------------------------</span>
|
|
<span class="w"> </span><span class="n">id</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="k">operation</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="k">rows</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="k">distinct</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="n">memory</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="n">width</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="n">costs</span>
|
|
<span class="w"> </span><span class="c1">----+-----------------------------------------------------+--------+------------+----------+---------+---------</span>
|
|
<span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="n">Streaming</span><span class="w"> </span><span class="p">(</span><span class="k">type</span><span class="p">:</span><span class="w"> </span><span class="n">GATHER</span><span class="p">)</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">32</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">16</span><span class="p">.</span><span class="mi">27</span>
|
|
<span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="k">Index</span><span class="w"> </span><span class="k">Only</span><span class="w"> </span><span class="n">Scan</span><span class="w"> </span><span class="k">using</span><span class="w"> </span><span class="n">index_b</span><span class="w"> </span><span class="k">on</span><span class="w"> </span><span class="k">public</span><span class="p">.</span><span class="n">test</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">1</span><span class="n">MB</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">32</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">8</span><span class="p">.</span><span class="mi">27</span>
|
|
|
|
<span class="w"> </span><span class="n">Predicate</span><span class="w"> </span><span class="n">Information</span><span class="w"> </span><span class="p">(</span><span class="n">identified</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="n">plan</span><span class="w"> </span><span class="n">id</span><span class="p">)</span>
|
|
<span class="w"> </span><span class="c1">--------------------------------------------------</span>
|
|
<span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="c1">--Index Only Scan using index_b on public.test</span>
|
|
<span class="w"> </span><span class="k">Index</span><span class="w"> </span><span class="n">Cond</span><span class="p">:</span><span class="w"> </span><span class="p">(</span><span class="n">test</span><span class="p">.</span><span class="n">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'1'</span><span class="p">::</span><span class="nb">text</span><span class="p">)</span>
|
|
|
|
<span class="w"> </span><span class="n">Targetlist</span><span class="w"> </span><span class="n">Information</span><span class="w"> </span><span class="p">(</span><span class="n">identified</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="n">plan</span><span class="w"> </span><span class="n">id</span><span class="p">)</span>
|
|
<span class="w"> </span><span class="c1">--------------------------------------------------</span>
|
|
<span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="c1">--Streaming (type: GATHER)</span>
|
|
<span class="w"> </span><span class="k">Output</span><span class="p">:</span><span class="w"> </span><span class="n">b</span>
|
|
<span class="w"> </span><span class="n">Node</span><span class="o">/</span><span class="n">s</span><span class="p">:</span><span class="w"> </span><span class="k">All</span><span class="w"> </span><span class="n">datanodes</span>
|
|
<span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="c1">--Index Only Scan using index_b on public.test</span>
|
|
<span class="w"> </span><span class="k">Output</span><span class="p">:</span><span class="w"> </span><span class="n">b</span>
|
|
<span class="w"> </span><span class="n">Distribute</span><span class="w"> </span><span class="k">Key</span><span class="p">:</span><span class="w"> </span><span class="n">a</span>
|
|
|
|
<span class="w"> </span><span class="o">======</span><span class="w"> </span><span class="n">Query</span><span class="w"> </span><span class="n">Summary</span><span class="w"> </span><span class="o">=====</span>
|
|
<span class="w"> </span><span class="c1">-------------------------------</span>
|
|
<span class="w"> </span><span class="k">System</span><span class="w"> </span><span class="n">available</span><span class="w"> </span><span class="n">mem</span><span class="p">:</span><span class="w"> </span><span class="mi">3358720</span><span class="n">KB</span>
|
|
<span class="w"> </span><span class="n">Query</span><span class="w"> </span><span class="k">Max</span><span class="w"> </span><span class="n">mem</span><span class="p">:</span><span class="w"> </span><span class="mi">3358720</span><span class="n">KB</span>
|
|
<span class="w"> </span><span class="n">Query</span><span class="w"> </span><span class="n">estimated</span><span class="w"> </span><span class="n">mem</span><span class="p">:</span><span class="w"> </span><span class="mi">1024</span><span class="n">KB</span>
|
|
<span class="p">(</span><span class="mi">24</span><span class="w"> </span><span class="k">rows</span><span class="p">)</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001462378445__screen17558154143410"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
|
|
<span class="normal"> 2</span>
|
|
<span class="normal"> 3</span>
|
|
<span class="normal"> 4</span>
|
|
<span class="normal"> 5</span>
|
|
<span class="normal"> 6</span>
|
|
<span class="normal"> 7</span>
|
|
<span class="normal"> 8</span>
|
|
<span class="normal"> 9</span>
|
|
<span class="normal">10</span>
|
|
<span class="normal">11</span>
|
|
<span class="normal">12</span>
|
|
<span class="normal">13</span>
|
|
<span class="normal">14</span>
|
|
<span class="normal">15</span>
|
|
<span class="normal">16</span>
|
|
<span class="normal">17</span>
|
|
<span class="normal">18</span>
|
|
<span class="normal">19</span>
|
|
<span class="normal">20</span>
|
|
<span class="normal">21</span>
|
|
<span class="normal">22</span>
|
|
<span class="normal">23</span>
|
|
<span class="normal">24</span>
|
|
<span class="normal">25</span>
|
|
<span class="normal">26</span>
|
|
<span class="normal">27</span>
|
|
<span class="normal">28</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">explain</span><span class="w"> </span><span class="k">verbose</span><span class="w"> </span><span class="k">select</span><span class="cm">/*+ indexonlyscan(test)*/</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="k">from</span><span class="w"> </span><span class="n">test</span><span class="w"> </span><span class="k">where</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'1'</span><span class="p">;</span>
|
|
<span class="w"> </span><span class="n">QUERY</span><span class="w"> </span><span class="n">PLAN</span>
|
|
<span class="c1">-----------------------------------------------------------------------------------------------------------------</span>
|
|
<span class="w"> </span><span class="n">id</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="k">operation</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="k">rows</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="k">distinct</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="n">memory</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="n">width</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="n">costs</span>
|
|
<span class="w"> </span><span class="c1">----+-----------------------------------------------------+--------+------------+----------+---------+---------</span>
|
|
<span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="n">Streaming</span><span class="w"> </span><span class="p">(</span><span class="k">type</span><span class="p">:</span><span class="w"> </span><span class="n">GATHER</span><span class="p">)</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">32</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">16</span><span class="p">.</span><span class="mi">27</span>
|
|
<span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="k">Index</span><span class="w"> </span><span class="k">Only</span><span class="w"> </span><span class="n">Scan</span><span class="w"> </span><span class="k">using</span><span class="w"> </span><span class="n">index_b</span><span class="w"> </span><span class="k">on</span><span class="w"> </span><span class="k">public</span><span class="p">.</span><span class="n">test</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">1</span><span class="n">MB</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">32</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">8</span><span class="p">.</span><span class="mi">27</span>
|
|
|
|
<span class="w"> </span><span class="n">Predicate</span><span class="w"> </span><span class="n">Information</span><span class="w"> </span><span class="p">(</span><span class="n">identified</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="n">plan</span><span class="w"> </span><span class="n">id</span><span class="p">)</span>
|
|
<span class="w"> </span><span class="c1">--------------------------------------------------</span>
|
|
<span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="c1">--Index Only Scan using index_b on public.test</span>
|
|
<span class="w"> </span><span class="k">Index</span><span class="w"> </span><span class="n">Cond</span><span class="p">:</span><span class="w"> </span><span class="p">(</span><span class="n">test</span><span class="p">.</span><span class="n">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'1'</span><span class="p">::</span><span class="nb">text</span><span class="p">)</span>
|
|
|
|
<span class="w"> </span><span class="n">Targetlist</span><span class="w"> </span><span class="n">Information</span><span class="w"> </span><span class="p">(</span><span class="n">identified</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="n">plan</span><span class="w"> </span><span class="n">id</span><span class="p">)</span>
|
|
<span class="w"> </span><span class="c1">--------------------------------------------------</span>
|
|
<span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="c1">--Streaming (type: GATHER)</span>
|
|
<span class="w"> </span><span class="k">Output</span><span class="p">:</span><span class="w"> </span><span class="n">b</span>
|
|
<span class="w"> </span><span class="n">Node</span><span class="o">/</span><span class="n">s</span><span class="p">:</span><span class="w"> </span><span class="k">All</span><span class="w"> </span><span class="n">datanodes</span>
|
|
<span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="c1">--Index Only Scan using index_b on public.test</span>
|
|
<span class="w"> </span><span class="k">Output</span><span class="p">:</span><span class="w"> </span><span class="n">b</span>
|
|
<span class="w"> </span><span class="n">Distribute</span><span class="w"> </span><span class="k">Key</span><span class="p">:</span><span class="w"> </span><span class="n">a</span>
|
|
|
|
<span class="w"> </span><span class="o">======</span><span class="w"> </span><span class="n">Query</span><span class="w"> </span><span class="n">Summary</span><span class="w"> </span><span class="o">=====</span>
|
|
<span class="w"> </span><span class="c1">-------------------------------</span>
|
|
<span class="w"> </span><span class="k">System</span><span class="w"> </span><span class="n">available</span><span class="w"> </span><span class="n">mem</span><span class="p">:</span><span class="w"> </span><span class="mi">3358720</span><span class="n">KB</span>
|
|
<span class="w"> </span><span class="n">Query</span><span class="w"> </span><span class="k">Max</span><span class="w"> </span><span class="n">mem</span><span class="p">:</span><span class="w"> </span><span class="mi">3358720</span><span class="n">KB</span>
|
|
<span class="w"> </span><span class="n">Query</span><span class="w"> </span><span class="n">estimated</span><span class="w"> </span><span class="n">mem</span><span class="p">:</span><span class="w"> </span><span class="mi">1024</span><span class="n">KB</span>
|
|
<span class="p">(</span><span class="mi">24</span><span class="w"> </span><span class="k">rows</span><span class="p">)</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
<p id="EN-US_TOPIC_0000001462378445__p10413154649">Optimization method: Correctly specify Index scan and Index-Only Scan.</p>
|
|
</div>
|
|
<div class="section" id="EN-US_TOPIC_0000001462378445__section197911519997"><h4 class="sectiontitle">Reason 6: Incorrect Use of GIN Index in Full-Text Retrieval</h4><p id="EN-US_TOPIC_0000001462378445__p114131454841">To accelerate text search, you can create a GIN index for full-text search.</p>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001462378445__screen595915241016"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">CREATE</span><span class="w"> </span><span class="k">INDEX</span><span class="w"> </span><span class="n">idxb</span><span class="w"> </span><span class="k">ON</span><span class="w"> </span><span class="n">test</span><span class="w"> </span><span class="k">using</span><span class="w"> </span><span class="n">gin</span><span class="p">(</span><span class="n">to_tsvector</span><span class="p">(</span><span class="s1">'english'</span><span class="p">,</span><span class="n">b</span><span class="p">));</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
<p id="EN-US_TOPIC_0000001462378445__p24131054346">When creating the GIN index, you must use the 2-argument version of to_tsvector. Only when the query also uses the 2-argument version and the arguments are the same as that in the Gin index, the GIN index can be called.</p>
|
|
<div class="note" id="EN-US_TOPIC_0000001462378445__note20905171241518"><img src="public_sys-resources/note_3.0-en-us.png"><span class="notetitle"> </span><div class="notebody"><p id="EN-US_TOPIC_0000001462378445__p013124954013">The to_tsvector() function accepts one or two augments. If the one-augment version of the index is used, the system will use the configuration specified by <strong id="EN-US_TOPIC_0000001462378445__b582885712417">default_text_search_config</strong> by default. To create an index, the two-augment version must be used, or the index content may be inconsistent.</p>
|
|
</div></div>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001462378445__screen1359020451910"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
|
|
<span class="normal"> 2</span>
|
|
<span class="normal"> 3</span>
|
|
<span class="normal"> 4</span>
|
|
<span class="normal"> 5</span>
|
|
<span class="normal"> 6</span>
|
|
<span class="normal"> 7</span>
|
|
<span class="normal"> 8</span>
|
|
<span class="normal"> 9</span>
|
|
<span class="normal">10</span>
|
|
<span class="normal">11</span>
|
|
<span class="normal">12</span>
|
|
<span class="normal">13</span>
|
|
<span class="normal">14</span>
|
|
<span class="normal">15</span>
|
|
<span class="normal">16</span>
|
|
<span class="normal">17</span>
|
|
<span class="normal">18</span>
|
|
<span class="normal">19</span>
|
|
<span class="normal">20</span>
|
|
<span class="normal">21</span>
|
|
<span class="normal">22</span>
|
|
<span class="normal">23</span>
|
|
<span class="normal">24</span>
|
|
<span class="normal">25</span>
|
|
<span class="normal">26</span>
|
|
<span class="normal">27</span>
|
|
<span class="normal">28</span>
|
|
<span class="normal">29</span>
|
|
<span class="normal">30</span>
|
|
<span class="normal">31</span>
|
|
<span class="normal">32</span>
|
|
<span class="normal">33</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">explain</span><span class="w"> </span><span class="k">verbose</span><span class="w"> </span><span class="k">select</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">from</span><span class="w"> </span><span class="n">test</span><span class="w"> </span><span class="k">where</span><span class="w"> </span><span class="n">to_tsvector</span><span class="p">(</span><span class="n">b</span><span class="p">)</span><span class="w"> </span><span class="o">@@</span><span class="w"> </span><span class="n">to_tsquery</span><span class="p">(</span><span class="s1">'cat'</span><span class="p">)</span><span class="w"> </span><span class="k">order</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
|
|
<span class="w"> </span><span class="n">QUERY</span><span class="w"> </span><span class="n">PLAN</span>
|
|
<span class="c1">-----------------------------------------------------------------------------------------------</span>
|
|
<span class="w"> </span><span class="n">id</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="k">operation</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="k">rows</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="k">distinct</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="n">memory</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="n">width</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="n">costs</span>
|
|
<span class="w"> </span><span class="c1">----+-----------------------------------+--------+------------+----------+---------+---------</span>
|
|
<span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="n">Streaming</span><span class="w"> </span><span class="p">(</span><span class="k">type</span><span class="p">:</span><span class="w"> </span><span class="n">GATHER</span><span class="p">)</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">44</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">22</span><span class="p">.</span><span class="mi">23</span>
|
|
<span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="n">Sort</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">16</span><span class="n">MB</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">44</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">14</span><span class="p">.</span><span class="mi">23</span>
|
|
<span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="n">Seq</span><span class="w"> </span><span class="n">Scan</span><span class="w"> </span><span class="k">on</span><span class="w"> </span><span class="k">public</span><span class="p">.</span><span class="n">test</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">1</span><span class="n">MB</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">44</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">14</span><span class="p">.</span><span class="mi">21</span>
|
|
|
|
<span class="w"> </span><span class="n">Predicate</span><span class="w"> </span><span class="n">Information</span><span class="w"> </span><span class="p">(</span><span class="n">identified</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="n">plan</span><span class="w"> </span><span class="n">id</span><span class="p">)</span>
|
|
<span class="w"> </span><span class="c1">-----------------------------------------------------------</span>
|
|
<span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="c1">--Seq Scan on public.test</span>
|
|
<span class="w"> </span><span class="n">Filter</span><span class="p">:</span><span class="w"> </span><span class="p">(</span><span class="n">to_tsvector</span><span class="p">(</span><span class="n">test</span><span class="p">.</span><span class="n">b</span><span class="p">)</span><span class="w"> </span><span class="o">@@</span><span class="w"> </span><span class="s1">'''cat'''</span><span class="p">::</span><span class="n">tsquery</span><span class="p">)</span>
|
|
|
|
<span class="w"> </span><span class="n">Targetlist</span><span class="w"> </span><span class="n">Information</span><span class="w"> </span><span class="p">(</span><span class="n">identified</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="n">plan</span><span class="w"> </span><span class="n">id</span><span class="p">)</span>
|
|
<span class="w"> </span><span class="c1">----------------------------------------------</span>
|
|
<span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="c1">--Streaming (type: GATHER)</span>
|
|
<span class="w"> </span><span class="k">Output</span><span class="p">:</span><span class="w"> </span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="p">,</span><span class="w"> </span><span class="k">c</span>
|
|
<span class="w"> </span><span class="n">Merge</span><span class="w"> </span><span class="n">Sort</span><span class="w"> </span><span class="k">Key</span><span class="p">:</span><span class="w"> </span><span class="n">test</span><span class="p">.</span><span class="n">a</span>
|
|
<span class="w"> </span><span class="n">Node</span><span class="o">/</span><span class="n">s</span><span class="p">:</span><span class="w"> </span><span class="k">All</span><span class="w"> </span><span class="n">datanodes</span>
|
|
<span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="c1">--Sort</span>
|
|
<span class="w"> </span><span class="k">Output</span><span class="p">:</span><span class="w"> </span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="p">,</span><span class="w"> </span><span class="k">c</span>
|
|
<span class="w"> </span><span class="n">Sort</span><span class="w"> </span><span class="k">Key</span><span class="p">:</span><span class="w"> </span><span class="n">test</span><span class="p">.</span><span class="n">a</span>
|
|
<span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="c1">--Seq Scan on public.test</span>
|
|
<span class="w"> </span><span class="k">Output</span><span class="p">:</span><span class="w"> </span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="p">,</span><span class="w"> </span><span class="k">c</span>
|
|
<span class="w"> </span><span class="n">Distribute</span><span class="w"> </span><span class="k">Key</span><span class="p">:</span><span class="w"> </span><span class="n">a</span>
|
|
|
|
<span class="w"> </span><span class="o">======</span><span class="w"> </span><span class="n">Query</span><span class="w"> </span><span class="n">Summary</span><span class="w"> </span><span class="o">=====</span>
|
|
<span class="w"> </span><span class="c1">-------------------------------</span>
|
|
<span class="w"> </span><span class="k">System</span><span class="w"> </span><span class="n">available</span><span class="w"> </span><span class="n">mem</span><span class="p">:</span><span class="w"> </span><span class="mi">3358720</span><span class="n">KB</span>
|
|
<span class="w"> </span><span class="n">Query</span><span class="w"> </span><span class="k">Max</span><span class="w"> </span><span class="n">mem</span><span class="p">:</span><span class="w"> </span><span class="mi">3358720</span><span class="n">KB</span>
|
|
<span class="w"> </span><span class="n">Query</span><span class="w"> </span><span class="n">estimated</span><span class="w"> </span><span class="n">mem</span><span class="p">:</span><span class="w"> </span><span class="mi">1024</span><span class="n">KB</span>
|
|
<span class="p">(</span><span class="mi">29</span><span class="w"> </span><span class="k">rows</span><span class="p">)</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001462378445__screen721338193417"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
|
|
<span class="normal"> 2</span>
|
|
<span class="normal"> 3</span>
|
|
<span class="normal"> 4</span>
|
|
<span class="normal"> 5</span>
|
|
<span class="normal"> 6</span>
|
|
<span class="normal"> 7</span>
|
|
<span class="normal"> 8</span>
|
|
<span class="normal"> 9</span>
|
|
<span class="normal">10</span>
|
|
<span class="normal">11</span>
|
|
<span class="normal">12</span>
|
|
<span class="normal">13</span>
|
|
<span class="normal">14</span>
|
|
<span class="normal">15</span>
|
|
<span class="normal">16</span>
|
|
<span class="normal">17</span>
|
|
<span class="normal">18</span>
|
|
<span class="normal">19</span>
|
|
<span class="normal">20</span>
|
|
<span class="normal">21</span>
|
|
<span class="normal">22</span>
|
|
<span class="normal">23</span>
|
|
<span class="normal">24</span>
|
|
<span class="normal">25</span>
|
|
<span class="normal">26</span>
|
|
<span class="normal">27</span>
|
|
<span class="normal">28</span>
|
|
<span class="normal">29</span>
|
|
<span class="normal">30</span>
|
|
<span class="normal">31</span>
|
|
<span class="normal">32</span>
|
|
<span class="normal">33</span>
|
|
<span class="normal">34</span>
|
|
<span class="normal">35</span>
|
|
<span class="normal">36</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">explain</span><span class="w"> </span><span class="k">verbose</span><span class="w"> </span><span class="k">select</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">from</span><span class="w"> </span><span class="n">test</span><span class="w"> </span><span class="k">where</span><span class="w"> </span><span class="n">to_tsvector</span><span class="p">(</span><span class="s1">'english'</span><span class="p">,</span><span class="n">b</span><span class="p">)</span><span class="w"> </span><span class="o">@@</span><span class="w"> </span><span class="n">to_tsquery</span><span class="p">(</span><span class="s1">'cat'</span><span class="p">)</span><span class="w"> </span><span class="k">order</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
|
|
<span class="w"> </span><span class="n">QUERY</span><span class="w"> </span><span class="n">PLAN</span>
|
|
<span class="c1">-------------------------------------------------------------------------------------------------------</span>
|
|
<span class="w"> </span><span class="n">id</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="k">operation</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="k">rows</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="k">distinct</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="n">memory</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="n">width</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">E</span><span class="o">-</span><span class="n">costs</span>
|
|
<span class="w"> </span><span class="c1">----+-------------------------------------------+--------+------------+----------+---------+---------</span>
|
|
<span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="n">Streaming</span><span class="w"> </span><span class="p">(</span><span class="k">type</span><span class="p">:</span><span class="w"> </span><span class="n">GATHER</span><span class="p">)</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">44</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">20</span><span class="p">.</span><span class="mi">03</span>
|
|
<span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="n">Sort</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">16</span><span class="n">MB</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">44</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">12</span><span class="p">.</span><span class="mi">03</span>
|
|
<span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="n">Bitmap</span><span class="w"> </span><span class="n">Heap</span><span class="w"> </span><span class="n">Scan</span><span class="w"> </span><span class="k">on</span><span class="w"> </span><span class="k">public</span><span class="p">.</span><span class="n">test</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">1</span><span class="n">MB</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">44</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">12</span><span class="p">.</span><span class="mi">02</span>
|
|
<span class="w"> </span><span class="mi">4</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="n">Bitmap</span><span class="w"> </span><span class="k">Index</span><span class="w"> </span><span class="n">Scan</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">1</span><span class="n">MB</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">8</span><span class="p">.</span><span class="mi">00</span>
|
|
|
|
<span class="w"> </span><span class="n">Predicate</span><span class="w"> </span><span class="n">Information</span><span class="w"> </span><span class="p">(</span><span class="n">identified</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="n">plan</span><span class="w"> </span><span class="n">id</span><span class="p">)</span>
|
|
<span class="w"> </span><span class="c1">---------------------------------------------------------------------------------------</span>
|
|
<span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="c1">--Bitmap Heap Scan on public.test</span>
|
|
<span class="w"> </span><span class="k">Recheck</span><span class="w"> </span><span class="n">Cond</span><span class="p">:</span><span class="w"> </span><span class="p">(</span><span class="n">to_tsvector</span><span class="p">(</span><span class="s1">'english'</span><span class="p">::</span><span class="n">regconfig</span><span class="p">,</span><span class="w"> </span><span class="n">test</span><span class="p">.</span><span class="n">b</span><span class="p">)</span><span class="w"> </span><span class="o">@@</span><span class="w"> </span><span class="s1">'''cat'''</span><span class="p">::</span><span class="n">tsquery</span><span class="p">)</span>
|
|
<span class="w"> </span><span class="mi">4</span><span class="w"> </span><span class="c1">--Bitmap Index Scan</span>
|
|
<span class="w"> </span><span class="k">Index</span><span class="w"> </span><span class="n">Cond</span><span class="p">:</span><span class="w"> </span><span class="p">(</span><span class="n">to_tsvector</span><span class="p">(</span><span class="s1">'english'</span><span class="p">::</span><span class="n">regconfig</span><span class="p">,</span><span class="w"> </span><span class="n">test</span><span class="p">.</span><span class="n">b</span><span class="p">)</span><span class="w"> </span><span class="o">@@</span><span class="w"> </span><span class="s1">'''cat'''</span><span class="p">::</span><span class="n">tsquery</span><span class="p">)</span>
|
|
|
|
<span class="w"> </span><span class="n">Targetlist</span><span class="w"> </span><span class="n">Information</span><span class="w"> </span><span class="p">(</span><span class="n">identified</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="n">plan</span><span class="w"> </span><span class="n">id</span><span class="p">)</span>
|
|
<span class="w"> </span><span class="c1">----------------------------------------------</span>
|
|
<span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="c1">--Streaming (type: GATHER)</span>
|
|
<span class="w"> </span><span class="k">Output</span><span class="p">:</span><span class="w"> </span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="p">,</span><span class="w"> </span><span class="k">c</span>
|
|
<span class="w"> </span><span class="n">Merge</span><span class="w"> </span><span class="n">Sort</span><span class="w"> </span><span class="k">Key</span><span class="p">:</span><span class="w"> </span><span class="n">test</span><span class="p">.</span><span class="n">a</span>
|
|
<span class="w"> </span><span class="n">Node</span><span class="o">/</span><span class="n">s</span><span class="p">:</span><span class="w"> </span><span class="k">All</span><span class="w"> </span><span class="n">datanodes</span>
|
|
<span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="c1">--Sort</span>
|
|
<span class="w"> </span><span class="k">Output</span><span class="p">:</span><span class="w"> </span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="p">,</span><span class="w"> </span><span class="k">c</span>
|
|
<span class="w"> </span><span class="n">Sort</span><span class="w"> </span><span class="k">Key</span><span class="p">:</span><span class="w"> </span><span class="n">test</span><span class="p">.</span><span class="n">a</span>
|
|
<span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="c1">--Bitmap Heap Scan on public.test</span>
|
|
<span class="w"> </span><span class="k">Output</span><span class="p">:</span><span class="w"> </span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="p">,</span><span class="w"> </span><span class="k">c</span>
|
|
<span class="w"> </span><span class="n">Distribute</span><span class="w"> </span><span class="k">Key</span><span class="p">:</span><span class="w"> </span><span class="n">a</span>
|
|
|
|
<span class="w"> </span><span class="o">======</span><span class="w"> </span><span class="n">Query</span><span class="w"> </span><span class="n">Summary</span><span class="w"> </span><span class="o">=====</span>
|
|
<span class="w"> </span><span class="c1">-------------------------------</span>
|
|
<span class="w"> </span><span class="k">System</span><span class="w"> </span><span class="n">available</span><span class="w"> </span><span class="n">mem</span><span class="p">:</span><span class="w"> </span><span class="mi">3358720</span><span class="n">KB</span>
|
|
<span class="w"> </span><span class="n">Query</span><span class="w"> </span><span class="k">Max</span><span class="w"> </span><span class="n">mem</span><span class="p">:</span><span class="w"> </span><span class="mi">3358720</span><span class="n">KB</span>
|
|
<span class="w"> </span><span class="n">Query</span><span class="w"> </span><span class="n">estimated</span><span class="w"> </span><span class="n">mem</span><span class="p">:</span><span class="w"> </span><span class="mi">2048</span><span class="n">KB</span>
|
|
<span class="p">(</span><span class="mi">32</span><span class="w"> </span><span class="k">rows</span><span class="p">)</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
<p id="EN-US_TOPIC_0000001462378445__p1041415414414">Optimization method: Use the 2-argument version of to_tsvector for the query and ensure that the argument values are the same as those in the index.</p>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<div class="familylinks">
|
|
<div class="parentlink"><strong>Parent topic:</strong> <a href="dws_03_0065.html">Database Usage</a></div>
|
|
</div>
|
|
</div>
|
|
|