doc-exports/docs/dws/dev/dws_04_0479.html
Lu, Huayi e6fa411af0 DWS DEV 830.201 version
Reviewed-by: Pruthi, Vineet <vineet.pruthi@t-systems.com>
Co-authored-by: Lu, Huayi <luhuayi@huawei.com>
Co-committed-by: Lu, Huayi <luhuayi@huawei.com>
2024-05-16 07:24:04 +00:00

240 lines
32 KiB
HTML

<a name="EN-US_TOPIC_0000001188482238"></a><a name="EN-US_TOPIC_0000001188482238"></a>
<h1 class="topictitle1">Case: Configuring cost_param for Better Query Performance</h1>
<div id="body8662426"><p id="EN-US_TOPIC_0000001188482238__p1538344011184">The cost_param parameter is used to control use of different estimation methods in specific customer scenarios, allowing estimated values to be close to onsite values. This parameter can control various methods simultaneously by performing AND (&amp;) operations on the bit for each method. A method is selected if its value is not <span class="parmvalue" id="EN-US_TOPIC_0000001188482238__parmvalue39588815394423"><b>0</b></span>.</p>
<div class="section" id="EN-US_TOPIC_0000001188482238__s35177b4bda2b47f29251946e7a7aa325"><h4 class="sectiontitle">Scenario 1: Before Optimization</h4><p id="EN-US_TOPIC_0000001188482238__aa2361dbe69b3478f9872042e2da99cd2">If <strong id="EN-US_TOPIC_0000001188482238__b37009518134">bit0</strong> of <strong id="EN-US_TOPIC_0000001188482238__b17707105151310">cost_param</strong> is set to <strong id="EN-US_TOPIC_0000001188482238__b1870819511136">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_0000001188482238__en-us_topic_0088511477_b842352706144157">bit0</strong> of <span class="parmname" id="EN-US_TOPIC_0000001188482238__en-us_topic_0088511477_parmname449129672101433"><b>cost_param</b></span> is set to <span class="parmvalue" id="EN-US_TOPIC_0000001188482238__en-us_topic_0088511477_parmvalue1692709238101433"><b>1</b></span>. In <span id="EN-US_TOPIC_0000001188482238__ph778311453152">V300R002C00</span> and later, <strong id="EN-US_TOPIC_0000001188482238__b11864304403">cost_param &amp; 1=0</strong> is not used. That is, an optimized formula is selected for calculation.</p>
<div class="note" id="EN-US_TOPIC_0000001188482238__note1998815424011"><img src="public_sys-resources/note_3.0-en-us.png"><span class="notetitle"> </span><div class="notebody"><p id="EN-US_TOPIC_0000001188482238__p19988204217011">The selection rate indicates the percentage for which the number of rows meeting the join conditions account of the <strong id="EN-US_TOPIC_0000001188482238__b1713218122213">JOIN</strong> results when the <strong id="EN-US_TOPIC_0000001188482238__b141325125215">JOIN</strong> relationship is established between two tables.</p>
</div></div>
<p id="EN-US_TOPIC_0000001188482238__ab847e4c7798e43f180f3699abc061fdb">The table structure is as follows:</p>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001188482238__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="p">(</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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="k">CREATE</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="n">ORDERS</span>
<span class="p">(</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="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="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="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="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="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="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="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="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="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>
</pre></div></td></tr></table></div>
</div>
<p id="EN-US_TOPIC_0000001188482238__a1917308f0031406f88dd1c00d0b75c94">The query statements are as follows:</p>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001188482238__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="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="n">lineitem</span><span class="w"> </span><span class="n">l1</span><span class="p">,</span>
<span class="n">orders</span><span class="w"> </span>
<span class="k">where</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="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="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="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="k">select</span>
<span class="o">*</span>
<span class="k">from</span>
<span class="n">lineitem</span><span class="w"> </span><span class="n">l3</span>
<span class="k">where</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="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="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="p">)</span>
<span class="k">order</span><span class="w"> </span><span class="k">by</span>
<span class="n">numwait</span><span class="w"> </span><span class="k">desc</span><span class="p">;</span>
</pre></div></td></tr></table></div>
</div>
<p id="EN-US_TOPIC_0000001188482238__ae10b91afad55495aa9166631986609d9">The following figure shows the execution plan. (When <strong id="EN-US_TOPIC_0000001188482238__b117271856652">verbose</strong> is used, <strong id="EN-US_TOPIC_0000001188482238__b17281756653">distinct</strong> is added for column selection which is controlled by <strong id="EN-US_TOPIC_0000001188482238__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_0000001188482238__p1863914338389"><span><img id="EN-US_TOPIC_0000001188482238__image13386833131317" src="figure/en-us_image_0000001188163834.png"></span></p>
</div>
<div class="section" id="EN-US_TOPIC_0000001188482238__sda84715305bf4d8a89f230bb03587a02"><h4 class="sectiontitle">Scenario 1: After Optimization</h4><p id="EN-US_TOPIC_0000001188482238__a0257e67c34094928aa87a8b9f126e1c5">These queries are from Anti Join connected in the <strong id="EN-US_TOPIC_0000001188482238__b1328814162312">lineitem</strong> table. When <span class="parmname" id="EN-US_TOPIC_0000001188482238__en-us_topic_0088511477_parmname782598923113511"><b>cost_param &amp; bit0</b></span> is <span class="parmvalue" id="EN-US_TOPIC_0000001188482238__en-us_topic_0088511477_parmvalue1163515617113511"><b>0</b></span>, the estimated number of Anti Join rows greatly differs from that of the actual number of rows, compromising the query performance. You can estimate the number of Anti Join rows more accurately by setting <span class="parmname" id="EN-US_TOPIC_0000001188482238__en-us_topic_0088511477_parmname461044847113018"><b>cost_param &amp; bit0</b></span> to <span class="parmvalue" id="EN-US_TOPIC_0000001188482238__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_0000001188482238__p16915711313"><span><img id="EN-US_TOPIC_0000001188482238__image123391910181412" src="figure/en-us_image_0000001233681879.png"></span></p>
</div>
<div class="section" id="EN-US_TOPIC_0000001188482238__s27528715ebb94b19b8c5b4197e89ae00"><h4 class="sectiontitle">Scenario 2: Before Optimization</h4><p id="EN-US_TOPIC_0000001188482238__afc8c1842051c4ae399b56f4554402074">If <strong id="EN-US_TOPIC_0000001188482238__b648317525214">bit1</strong> is set to <strong id="EN-US_TOPIC_0000001188482238__b14841521626">1</strong> (<strong id="EN-US_TOPIC_0000001188482238__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 <strong id="EN-US_TOPIC_0000001188482238__b5715171845">bit1</strong> of <strong id="EN-US_TOPIC_0000001188482238__b37217445">cost_param</strong> is set to <strong id="EN-US_TOPIC_0000001188482238__b16816171144">1</strong>.</p>
<p id="EN-US_TOPIC_0000001188482238__a04b4e859fac8494ea32b3e62c383eab0">The table structure is as follows:</p>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001188482238__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="p">(</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="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="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="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="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="k">CREATE</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="n">SUPPLIER</span>
<span class="p">(</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="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="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="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="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="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="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="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="k">CREATE</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="n">PARTSUPP</span>
<span class="p">(</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="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="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="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="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="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>
</pre></div></td></tr></table></div>
</div>
<p id="EN-US_TOPIC_0000001188482238__aee5269ac8df54daebe89cbc0b81392eb">The query statements are as follows:</p>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001188482238__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="k">explain</span><span class="w"> </span><span class="k">verbose</span><span class="w"> </span><span class="k">select</span>
<span class="n">nation</span><span class="p">,</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="p">(</span>
<span class="k">select</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="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="k">from</span>
<span class="n">supplier</span><span class="p">,</span>
<span class="n">lineitem</span><span class="p">,</span>
<span class="n">partsupp</span><span class="p">,</span>
<span class="n">nation</span>
<span class="k">where</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="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="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="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="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>
</pre></div></td></tr></table></div>
</div>
<p id="EN-US_TOPIC_0000001188482238__afd54a56557244792a9c1fac8964f5f78">When <strong id="EN-US_TOPIC_0000001188482238__b1927984493183315">bit1</strong> of <span class="parmname" id="EN-US_TOPIC_0000001188482238__parmname1008355024183315"><b>cost_param</b></span> is <span class="parmvalue" id="EN-US_TOPIC_0000001188482238__en-us_topic_0088511477_parmvalue5551257441107"><b>0</b></span>, the execution plan is shown as follows:</p>
<p id="EN-US_TOPIC_0000001188482238__p66551749191416"><span><img id="EN-US_TOPIC_0000001188482238__image1157165061411" src="figure/en-us_image_0000001233563387.png"></span></p>
</div>
<div class="section" id="EN-US_TOPIC_0000001188482238__s04393aab27474ffb9dfc9c2d804781db"><h4 class="sectiontitle">Scenario 2: After Optimization</h4><p id="EN-US_TOPIC_0000001188482238__ab452296a75d642ecb8c7ab8abfc6cc1f">In the preceding queries, the hash join criteria of the supplier, lineitem, and partsupp tables are setting <strong id="EN-US_TOPIC_0000001188482238__en-us_topic_0088511477_en-us_topic_0058968267_b842352706115632">lineitem.l_suppkey</strong> to <strong id="EN-US_TOPIC_0000001188482238__en-us_topic_0088511477_en-us_topic_0058968267_b842352706115641">supplier.s_suppkey</strong> and <strong id="EN-US_TOPIC_0000001188482238__en-us_topic_0088511477_en-us_topic_0058968267_b842352706115654">lineitem.l_partkey</strong> to <strong id="EN-US_TOPIC_0000001188482238__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_0000001188482238__en-us_topic_0088511477_en-us_topic_0058968267_b842352706115758">lineitem.l_suppkey</strong> in the first filter criteria and <strong id="EN-US_TOPIC_0000001188482238__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_0000001188482238__en-us_topic_0088511477_parmname181638563714342"><b>cost_param &amp; bit1</b></span> is <span class="parmvalue" id="EN-US_TOPIC_0000001188482238__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_0000001188482238__p13347172219158"><span><img id="EN-US_TOPIC_0000001188482238__image1124412230157" src="figure/en-us_image_0000001233883443.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>