doc-exports/docs/dws/dev/dws_04_0479.html
Lu, Huayi a24ca60074 DWS DEVELOPER 811 version
Reviewed-by: Hasko, Vladimir <vladimir.hasko@t-systems.com>
Co-authored-by: Lu, Huayi <luhuayi@huawei.com>
Co-committed-by: Lu, Huayi <luhuayi@huawei.com>
2023-01-19 13:37:49 +00:00

238 lines
33 KiB
HTML

<a name="EN-US_TOPIC_0000001145694473"></a><a name="EN-US_TOPIC_0000001145694473"></a>
<h1 class="topictitle1">Case: Configuring cost_param for Better Query Performance</h1>
<div id="body8662426"><div class="section" id="EN-US_TOPIC_0000001145694473__s35177b4bda2b47f29251946e7a7aa325"><h4 class="sectiontitle">Symptom</h4><p id="EN-US_TOPIC_0000001145694473__aa2361dbe69b3478f9872042e2da99cd2">If <strong id="EN-US_TOPIC_0000001145694473__b1653124455210">bit0</strong> of <strong id="EN-US_TOPIC_0000001145694473__b835531311532">cost_param</strong> is set to <strong id="EN-US_TOPIC_0000001145694473__b653184455220">1</strong>, an improved mechanism is used for estimating the selection rate of non-equi-joins. This method is more accurate for estimating the selection rate of joins between two identical tables. The following example describes the optimization scenario when <strong id="EN-US_TOPIC_0000001145694473__en-us_topic_0088511477_b842352706144157">bit0</strong> of <span class="parmname" id="EN-US_TOPIC_0000001145694473__en-us_topic_0088511477_parmname449129672101433"><b>cost_param</b></span> is set to <span class="parmvalue" id="EN-US_TOPIC_0000001145694473__en-us_topic_0088511477_parmvalue1692709238101433"><b>1</b></span>. In <span id="EN-US_TOPIC_0000001145694473__ph778311453152">V300R002C00</span> and later, <strong id="EN-US_TOPIC_0000001145694473__b11864304403">cost_param &amp; 1=0</strong> is not used. That is, an optimized formula is selected for calculation.</p>
<p id="EN-US_TOPIC_0000001145694473__a4b0a1d43baf44573aea0945a78ec211e"><strong id="EN-US_TOPIC_0000001145694473__en-us_topic_0088511477_b43638991724">Note</strong>: The selection rate indicates the percentage for which the number of rows meeting the join conditions account of the <strong id="EN-US_TOPIC_0000001145694473__en-us_topic_0088511477_b842352706152952">JOIN</strong> results when the <strong id="EN-US_TOPIC_0000001145694473__en-us_topic_0088511477_b842352706152956">JOIN</strong> relationship is established between two tables.</p>
<p id="EN-US_TOPIC_0000001145694473__ab847e4c7798e43f180f3699abc061fdb">The table structure is as follows:</p>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001145694473__s5b4c97b33d1549f48e06a2200bd9d847"><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></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">LINEITEM</span><span class="w"></span>
<span class="p">(</span><span class="w"></span>
<span class="n">L_ORDERKEY</span><span class="w"> </span><span class="nb">BIGINT</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="w"></span>
<span class="p">,</span><span class="w"> </span><span class="n">L_PARTKEY</span><span class="w"> </span><span class="nb">BIGINT</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="w"></span>
<span class="p">,</span><span class="w"> </span><span class="n">L_SUPPKEY</span><span class="w"> </span><span class="nb">BIGINT</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="w"></span>
<span class="p">,</span><span class="w"> </span><span class="n">L_LINENUMBER</span><span class="w"> </span><span class="nb">BIGINT</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="w"></span>
<span class="p">,</span><span class="w"> </span><span class="n">L_QUANTITY</span><span class="w"> </span><span class="nb">DECIMAL</span><span class="p">(</span><span class="mi">15</span><span class="p">,</span><span class="mi">2</span><span class="p">)</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="w"></span>
<span class="p">,</span><span class="w"> </span><span class="n">L_EXTENDEDPRICE</span><span class="w"> </span><span class="nb">DECIMAL</span><span class="p">(</span><span class="mi">15</span><span class="p">,</span><span class="mi">2</span><span class="p">)</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="w"></span>
<span class="p">,</span><span class="w"> </span><span class="n">L_DISCOUNT</span><span class="w"> </span><span class="nb">DECIMAL</span><span class="p">(</span><span class="mi">15</span><span class="p">,</span><span class="mi">2</span><span class="p">)</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="w"></span>
<span class="p">,</span><span class="w"> </span><span class="n">L_TAX</span><span class="w"> </span><span class="nb">DECIMAL</span><span class="p">(</span><span class="mi">15</span><span class="p">,</span><span class="mi">2</span><span class="p">)</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="w"></span>
<span class="p">,</span><span class="w"> </span><span class="n">L_RETURNFLAG</span><span class="w"> </span><span class="nb">CHAR</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="w"></span>
<span class="p">,</span><span class="w"> </span><span class="n">L_LINESTATUS</span><span class="w"> </span><span class="nb">CHAR</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="w"></span>
<span class="p">,</span><span class="w"> </span><span class="n">L_SHIPDATE</span><span class="w"> </span><span class="nb">DATE</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="w"></span>
<span class="p">,</span><span class="w"> </span><span class="n">L_COMMITDATE</span><span class="w"> </span><span class="nb">DATE</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="w"></span>
<span class="p">,</span><span class="w"> </span><span class="n">L_RECEIPTDATE</span><span class="w"> </span><span class="nb">DATE</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="w"></span>
<span class="p">,</span><span class="w"> </span><span class="n">L_SHIPINSTRUCT</span><span class="w"> </span><span class="nb">CHAR</span><span class="p">(</span><span class="mi">25</span><span class="p">)</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="w"></span>
<span class="p">,</span><span class="w"> </span><span class="n">L_SHIPMODE</span><span class="w"> </span><span class="nb">CHAR</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="w"></span>
<span class="p">,</span><span class="w"> </span><span class="n">L_COMMENT</span><span class="w"> </span><span class="nb">VARCHAR</span><span class="p">(</span><span class="mi">44</span><span class="p">)</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="w"></span>
<span class="p">)</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="p">(</span><span class="n">orientation</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">column</span><span class="p">,</span><span class="w"> </span><span class="n">COMPRESSION</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MIDDLE</span><span class="p">)</span><span class="w"> </span><span class="n">distribute</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="n">hash</span><span class="p">(</span><span class="n">L_ORDERKEY</span><span class="p">);</span><span class="w"></span>
<span class="k">CREATE</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="n">ORDERS</span><span class="w"></span>
<span class="p">(</span><span class="w"></span>
<span class="n">O_ORDERKEY</span><span class="w"> </span><span class="nb">BIGINT</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="w"></span>
<span class="p">,</span><span class="w"> </span><span class="n">O_CUSTKEY</span><span class="w"> </span><span class="nb">BIGINT</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="w"></span>
<span class="p">,</span><span class="w"> </span><span class="n">O_ORDERSTATUS</span><span class="w"> </span><span class="nb">CHAR</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="w"></span>
<span class="p">,</span><span class="w"> </span><span class="n">O_TOTALPRICE</span><span class="w"> </span><span class="nb">DECIMAL</span><span class="p">(</span><span class="mi">15</span><span class="p">,</span><span class="mi">2</span><span class="p">)</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="w"></span>
<span class="p">,</span><span class="w"> </span><span class="n">O_ORDERDATE</span><span class="w"> </span><span class="nb">DATE</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="w"></span>
<span class="p">,</span><span class="w"> </span><span class="n">O_ORDERPRIORITY</span><span class="w"> </span><span class="nb">CHAR</span><span class="p">(</span><span class="mi">15</span><span class="p">)</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="w"></span>
<span class="p">,</span><span class="w"> </span><span class="n">O_CLERK</span><span class="w"> </span><span class="nb">CHAR</span><span class="p">(</span><span class="mi">15</span><span class="p">)</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="w"></span>
<span class="p">,</span><span class="w"> </span><span class="n">O_SHIPPRIORITY</span><span class="w"> </span><span class="nb">BIGINT</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="w"></span>
<span class="p">,</span><span class="w"> </span><span class="n">O_COMMENT</span><span class="w"> </span><span class="nb">VARCHAR</span><span class="p">(</span><span class="mi">79</span><span class="p">)</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="w"></span>
<span class="p">)</span><span class="k">with</span><span class="w"> </span><span class="p">(</span><span class="n">orientation</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">column</span><span class="p">,</span><span class="w"> </span><span class="n">COMPRESSION</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MIDDLE</span><span class="p">)</span><span class="w"> </span><span class="n">distribute</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="n">hash</span><span class="p">(</span><span class="n">O_ORDERKEY</span><span class="p">);</span><span class="w"></span>
</pre></div></td></tr></table></div>
</div>
<p id="EN-US_TOPIC_0000001145694473__a1917308f0031406f88dd1c00d0b75c94">The query statements are as follows:</p>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001145694473__s8133ff2302804308afedbbc7ffe30113"><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></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="k">count</span><span class="p">(</span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="n">numwait</span><span class="w"> </span>
<span class="k">from</span><span class="w"></span>
<span class="n">lineitem</span><span class="w"> </span><span class="n">l1</span><span class="p">,</span><span class="w"></span>
<span class="n">orders</span><span class="w"> </span>
<span class="k">where</span><span class="w"></span>
<span class="n">o_orderkey</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">l1</span><span class="p">.</span><span class="n">l_orderkey</span><span class="w"></span>
<span class="k">and</span><span class="w"> </span><span class="n">o_orderstatus</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'F'</span><span class="w"></span>
<span class="k">and</span><span class="w"> </span><span class="n">l1</span><span class="p">.</span><span class="n">l_receiptdate</span><span class="w"> </span><span class="o">&gt;</span><span class="w"> </span><span class="n">l1</span><span class="p">.</span><span class="n">l_commitdate</span><span class="w"></span>
<span class="k">and</span><span class="w"> </span><span class="k">not</span><span class="w"> </span><span class="k">exists</span><span class="w"> </span><span class="p">(</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">lineitem</span><span class="w"> </span><span class="n">l3</span><span class="w"></span>
<span class="k">where</span><span class="w"></span>
<span class="n">l3</span><span class="p">.</span><span class="n">l_orderkey</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">l1</span><span class="p">.</span><span class="n">l_orderkey</span><span class="w"></span>
<span class="k">and</span><span class="w"> </span><span class="n">l3</span><span class="p">.</span><span class="n">l_suppkey</span><span class="w"> </span><span class="o">&lt;&gt;</span><span class="w"> </span><span class="n">l1</span><span class="p">.</span><span class="n">l_suppkey</span><span class="w"></span>
<span class="k">and</span><span class="w"> </span><span class="n">l3</span><span class="p">.</span><span class="n">l_receiptdate</span><span class="w"> </span><span class="o">&gt;</span><span class="w"> </span><span class="n">l3</span><span class="p">.</span><span class="n">l_commitdate</span><span class="w"></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="n">numwait</span><span class="w"> </span><span class="k">desc</span><span class="p">;</span><span class="w"></span>
</pre></div></td></tr></table></div>
</div>
<p id="EN-US_TOPIC_0000001145694473__ae10b91afad55495aa9166631986609d9">The following figure shows the execution plan. (When <strong id="EN-US_TOPIC_0000001145694473__b117271856652">verbose</strong> is used, <strong id="EN-US_TOPIC_0000001145694473__b17281756653">distinct</strong> is added for column selection which is controlled by <strong id="EN-US_TOPIC_0000001145694473__b17729756959">cost off/on</strong>. The hash join rows show the estimated number of distinct values and the other rows do not.)</p>
<p id="EN-US_TOPIC_0000001145694473__p1863914338389"><span><img id="EN-US_TOPIC_0000001145694473__image13386833131317" src="figure/en-us_image_0000001098815118.png"></span></p>
</div>
<div class="section" id="EN-US_TOPIC_0000001145694473__sda84715305bf4d8a89f230bb03587a02"><h4 class="sectiontitle">Optimization Analysis 1</h4><p id="EN-US_TOPIC_0000001145694473__a0257e67c34094928aa87a8b9f126e1c5">These queries are from Anti Join connected in the lineitem table. When <span class="parmname" id="EN-US_TOPIC_0000001145694473__en-us_topic_0088511477_parmname782598923113511"><b>cost_param &amp; bit0</b></span> is <span class="parmvalue" id="EN-US_TOPIC_0000001145694473__en-us_topic_0088511477_parmvalue1163515617113511"><b>1</b></span>, the estimated number of Anti Join rows greatly differ from that of the actual number of rows so that the query performance deteriorates. You can estimate the number of Anti Join rows more accurately by setting <span class="parmname" id="EN-US_TOPIC_0000001145694473__en-us_topic_0088511477_parmname461044847113018"><b>cost_param &amp; bit0</b></span> to <span class="parmvalue" id="EN-US_TOPIC_0000001145694473__en-us_topic_0088511477_parmvalue948426908113018"><b>1</b></span> to improve the query performance. The optimized execution plan is as follows:</p>
<p id="EN-US_TOPIC_0000001145694473__p16915711313"><span><img id="EN-US_TOPIC_0000001145694473__image123391910181412" src="figure/en-us_image_0000001145895101.png"></span></p>
</div>
<div class="section" id="EN-US_TOPIC_0000001145694473__s27528715ebb94b19b8c5b4197e89ae00"><h4 class="sectiontitle">Symptom 2</h4><p id="EN-US_TOPIC_0000001145694473__afc8c1842051c4ae399b56f4554402074">If <strong id="EN-US_TOPIC_0000001145694473__b648317525214">bit1</strong> is set to <strong id="EN-US_TOPIC_0000001145694473__b14841521626">1</strong> (<strong id="EN-US_TOPIC_0000001145694473__b144852527212">set cost_param=2</strong>), the selection rate is estimated based on multiple filter criteria. The lowest selection rate among all filter criteria, but not the product of the selection rates for two tables under a specific filter criterion, is used as the total selection rate. This method is more accurate when a close correlation exists between the columns to be filtered. The following example describes the optimization scenario when <span class="parmname" id="EN-US_TOPIC_0000001145694473__parmname2102501788"><b>cost_param &amp; bit1</b></span> is <span class="parmvalue" id="EN-US_TOPIC_0000001145694473__parmvalue1358517396"><b>1</b></span>.</p>
<p id="EN-US_TOPIC_0000001145694473__a04b4e859fac8494ea32b3e62c383eab0">The table structure is as follows:</p>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001145694473__s98d36c1b8fcf4bdea8ea52ff7414e22a"><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></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">NATION</span><span class="w"></span>
<span class="p">(</span><span class="w"></span>
<span class="n">N_NATIONKEYINT</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="w"></span>
<span class="p">,</span><span class="w"> </span><span class="n">N_NAMECHAR</span><span class="p">(</span><span class="mi">25</span><span class="p">)</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="w"></span>
<span class="p">,</span><span class="w"> </span><span class="n">N_REGIONKEYINT</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="w"></span>
<span class="p">,</span><span class="w"> </span><span class="n">N_COMMENTVARCHAR</span><span class="p">(</span><span class="mi">152</span><span class="p">)</span><span class="w"></span>
<span class="p">)</span><span class="w"> </span><span class="n">distribute</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="n">replication</span><span class="p">;</span><span class="w"></span>
<span class="k">CREATE</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="n">SUPPLIER</span><span class="w"></span>
<span class="p">(</span><span class="w"></span>
<span class="n">S_SUPPKEYBIGINT</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="w"></span>
<span class="p">,</span><span class="w"> </span><span class="n">S_NAMECHAR</span><span class="p">(</span><span class="mi">25</span><span class="p">)</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="w"></span>
<span class="p">,</span><span class="w"> </span><span class="n">S_ADDRESSVARCHAR</span><span class="p">(</span><span class="mi">40</span><span class="p">)</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="w"></span>
<span class="p">,</span><span class="w"> </span><span class="n">S_NATIONKEYINT</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="w"></span>
<span class="p">,</span><span class="w"> </span><span class="n">S_PHONECHAR</span><span class="p">(</span><span class="mi">15</span><span class="p">)</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="w"></span>
<span class="p">,</span><span class="w"> </span><span class="n">S_ACCTBALDECIMAL</span><span class="p">(</span><span class="mi">15</span><span class="p">,</span><span class="mi">2</span><span class="p">)</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="w"></span>
<span class="p">,</span><span class="w"> </span><span class="n">S_COMMENTVARCHAR</span><span class="p">(</span><span class="mi">101</span><span class="p">)</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="w"></span>
<span class="p">)</span><span class="w"> </span><span class="n">distribute</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="n">hash</span><span class="p">(</span><span class="n">S_SUPPKEY</span><span class="p">);</span><span class="w"></span>
<span class="k">CREATE</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="n">PARTSUPP</span><span class="w"></span>
<span class="p">(</span><span class="w"></span>
<span class="n">PS_PARTKEYBIGINT</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="w"></span>
<span class="p">,</span><span class="w"> </span><span class="n">PS_SUPPKEYBIGINT</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="w"></span>
<span class="p">,</span><span class="w"> </span><span class="n">PS_AVAILQTYBIGINT</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="w"></span>
<span class="p">,</span><span class="w"> </span><span class="n">PS_SUPPLYCOSTDECIMAL</span><span class="p">(</span><span class="mi">15</span><span class="p">,</span><span class="mi">2</span><span class="p">)</span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="w"></span>
<span class="p">,</span><span class="w"> </span><span class="n">PS_COMMENTVARCHAR</span><span class="p">(</span><span class="mi">199</span><span class="p">)</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="w"></span>
<span class="p">)</span><span class="n">distribute</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="n">hash</span><span class="p">(</span><span class="n">PS_PARTKEY</span><span class="p">);</span><span class="w"></span>
</pre></div></td></tr></table></div>
</div>
<p id="EN-US_TOPIC_0000001145694473__aee5269ac8df54daebe89cbc0b81392eb">The query statements are as follows:</p>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001145694473__s60896dbcc8184a138878778ed85c0df1"><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></pre></div></td><td class="code"><div><pre><span></span><span class="k">set</span><span class="w"> </span><span class="n">cost_param</span><span class="o">=</span><span class="mi">2</span><span class="p">;</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="n">nation</span><span class="p">,</span><span class="w"></span>
<span class="k">sum</span><span class="p">(</span><span class="n">amount</span><span class="p">)</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="n">sum_profit</span><span class="w"> </span>
<span class="k">from</span><span class="w"></span>
<span class="p">(</span><span class="w"></span>
<span class="k">select</span><span class="w"></span>
<span class="n">n_name</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="n">nation</span><span class="p">,</span><span class="w"></span>
<span class="n">l_extendedprice</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="p">(</span><span class="mi">1</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">l_discount</span><span class="p">)</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">ps_supplycost</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">l_quantity</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="n">amount</span><span class="w"></span>
<span class="k">from</span><span class="w"></span>
<span class="n">supplier</span><span class="p">,</span><span class="w"></span>
<span class="n">lineitem</span><span class="p">,</span><span class="w"></span>
<span class="n">partsupp</span><span class="p">,</span><span class="w"></span>
<span class="n">nation</span><span class="w"></span>
<span class="k">where</span><span class="w"></span>
<span class="n">s_suppkey</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">l_suppkey</span><span class="w"></span>
<span class="k">and</span><span class="w"> </span><span class="n">ps_suppkey</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">l_suppkey</span><span class="w"></span>
<span class="k">and</span><span class="w"> </span><span class="n">ps_partkey</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">l_partkey</span><span class="w"></span>
<span class="k">and</span><span class="w"> </span><span class="n">s_nationkey</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">n_nationkey</span><span class="w"></span>
<span class="p">)</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="n">profit</span><span class="w"> </span>
<span class="k">group</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="n">nation</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="n">nation</span><span class="p">;</span><span class="w"></span>
</pre></div></td></tr></table></div>
</div>
<p id="EN-US_TOPIC_0000001145694473__afd54a56557244792a9c1fac8964f5f78">When <strong id="EN-US_TOPIC_0000001145694473__b1927984493183315">bit1</strong> of <span class="parmname" id="EN-US_TOPIC_0000001145694473__parmname1008355024183315"><b>cost_param</b></span> is <span class="parmvalue" id="EN-US_TOPIC_0000001145694473__en-us_topic_0088511477_parmvalue5551257441107"><b>0</b></span>, the execution plan is shown as follows:</p>
<p id="EN-US_TOPIC_0000001145694473__p66551749191416"><span><img id="EN-US_TOPIC_0000001145694473__image1157165061411" src="figure/en-us_image_0000001145695053.png"></span></p>
</div>
<div class="section" id="EN-US_TOPIC_0000001145694473__s04393aab27474ffb9dfc9c2d804781db"><h4 class="sectiontitle">Optimization Analysis 2</h4><p id="EN-US_TOPIC_0000001145694473__ab452296a75d642ecb8c7ab8abfc6cc1f">In the preceding queries, the hash join criteria of the supplier, lineitem, and partsupp tables are setting <strong id="EN-US_TOPIC_0000001145694473__en-us_topic_0088511477_en-us_topic_0058968267_b842352706115632">lineitem.l_suppkey</strong> to <strong id="EN-US_TOPIC_0000001145694473__en-us_topic_0088511477_en-us_topic_0058968267_b842352706115641">supplier.s_suppkey</strong> and <strong id="EN-US_TOPIC_0000001145694473__en-us_topic_0088511477_en-us_topic_0058968267_b842352706115654">lineitem.l_partkey</strong> to <strong id="EN-US_TOPIC_0000001145694473__en-us_topic_0088511477_en-us_topic_0058968267_b84235270611574">partsupp.ps_partkey</strong>. Two filter criteria exist in the hash join conditions. <strong id="EN-US_TOPIC_0000001145694473__en-us_topic_0088511477_en-us_topic_0058968267_b842352706115758">lineitem.l_suppkey</strong> in the first filter criteria and <strong id="EN-US_TOPIC_0000001145694473__en-us_topic_0088511477_en-us_topic_0058968267_b842352706115825">lineitem.l_partkey</strong> in the second filter criteria are two columns with strong relationship of the lineitem table. In this situation, when you estimate the rate of the hash join conditions, if <span class="parmname" id="EN-US_TOPIC_0000001145694473__en-us_topic_0088511477_parmname181638563714342"><b>cost_param &amp; bit1</b></span> is <span class="parmvalue" id="EN-US_TOPIC_0000001145694473__en-us_topic_0088511477_parmvalue155355777014342"><b>0</b></span>, the selection rate is estimated based on multiple filter criteria. The lowest selection rate among all filter criteria, but not the product of the selection rates for two tables under a specific filter criterion, is used as the total selection rate. This method is more accurate when a close correlation exists between the columns to be filtered. The plan after optimization is shown as follows:</p>
<p id="EN-US_TOPIC_0000001145694473__p13347172219158"><span><img id="EN-US_TOPIC_0000001145694473__image1124412230157" src="figure/en-us_image_0000001145814981.png"></span></p>
</div>
</div>
<div>
<div class="familylinks">
<div class="parentlink"><strong>Parent topic:</strong> <a href="dws_04_0474.html">Optimization Cases</a></div>
</div>
</div>