forked from docs/doc-exports
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>
116 lines
14 KiB
HTML
116 lines
14 KiB
HTML
<a name="EN-US_TOPIC_0000001188642062"></a><a name="EN-US_TOPIC_0000001188642062"></a>
|
|
|
|
<h1 class="topictitle1">Plan Hint Optimization</h1>
|
|
<div id="body1536647564178"><p id="EN-US_TOPIC_0000001188642062__p10057376101611">In plan hints, you can specify a join order, join, stream, and scan operations, the number of rows in a result, and redistribution skew information to tune an execution plan, improving query performance.</p>
|
|
<div class="section" id="EN-US_TOPIC_0000001188642062__section54351718142011"><h4 class="sectiontitle">Function</h4><p id="EN-US_TOPIC_0000001188642062__p1281023874112">The hint syntax must follow immediately after a <strong id="EN-US_TOPIC_0000001188642062__b4186160193711">SELECT</strong> keyword and is written in the following format:</p>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001188642062__screen7552435423"><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="cm">/*+ <plan hint>*/</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
<p id="EN-US_TOPIC_0000001188642062__p14302012112112">You can specify multiple hints for a query plan and separate them by spaces. A hint specified for a query plan does not apply to its subquery plans. To specify a hint for a subquery, add the hint following the <strong id="EN-US_TOPIC_0000001188642062__b16511174194615">SELECT</strong> of this subquery.</p>
|
|
</div>
|
|
<p id="EN-US_TOPIC_0000001188642062__p7688030104742">For example:</p>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001188642062__screen20255132863510"><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">select</span><span class="w"> </span><span class="cm">/*+ <plan_hint1> <plan_hint2> */</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">t1</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="k">select</span><span class="w"> </span><span class="cm">/*+ <plan_hint3> */</span><span class="w"> </span><span class="k">from</span><span class="w"> </span><span class="n">t2</span><span class="p">)</span><span class="w"> </span><span class="k">where</span><span class="w"> </span><span class="mi">1</span><span class="o">=</span><span class="mi">1</span><span class="p">;</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
<p id="EN-US_TOPIC_0000001188642062__p6698226910490">In the preceding command, <<em id="EN-US_TOPIC_0000001188642062__i9538165419448">plan_hint1</em>> and <<em id="EN-US_TOPIC_0000001188642062__i76071059164415">plan_hint2</em>> are the hints of a query, and <<em id="EN-US_TOPIC_0000001188642062__i159702299456">plan_hint3</em>> is the hint of its subquery.</p>
|
|
<div class="notice" id="EN-US_TOPIC_0000001188642062__note1172193415435"><span class="noticetitle"><img src="public_sys-resources/notice_3.0-en-us.png"> </span><div class="noticebody"><p id="EN-US_TOPIC_0000001188642062__p95011638124318">If a hint is specified in the <strong id="EN-US_TOPIC_0000001188642062__b1427417124489">CREATE VIEW</strong> statement, the hint will be applied each time this view is used.</p>
|
|
<p id="EN-US_TOPIC_0000001188642062__p29571631215312">If the random plan function is enabled (<strong id="EN-US_TOPIC_0000001188642062__b1353105315405">plan_mode_seed</strong> is set to a value other than 0), the specified hint will not be used.</p>
|
|
</div></div>
|
|
<div class="section" id="EN-US_TOPIC_0000001188642062__section1748920122313"><h4 class="sectiontitle">Supported Hints</h4><p id="EN-US_TOPIC_0000001188642062__p595686132716">Currently, the following hints are supported:</p>
|
|
</div>
|
|
<ul id="EN-US_TOPIC_0000001188642062__ul119219210409"><li id="EN-US_TOPIC_0000001188642062__li219214264019">Join order hints (<strong id="EN-US_TOPIC_0000001188642062__b43196256388">leading</strong>)</li><li id="EN-US_TOPIC_0000001188642062__li71923213401">Join operation hints, excluding the <strong id="EN-US_TOPIC_0000001188642062__b1884865214562">semi join</strong>, <strong id="EN-US_TOPIC_0000001188642062__b19969115515617">anti join</strong>, and <strong id="EN-US_TOPIC_0000001188642062__b1432965915611">unique plan</strong> hints</li><li id="EN-US_TOPIC_0000001188642062__li51928244018">Rows hints</li><li id="EN-US_TOPIC_0000001188642062__li1219215210403">Stream operation hints</li><li id="EN-US_TOPIC_0000001188642062__li3192102134010">Scan operation hints, supporting only <strong id="EN-US_TOPIC_0000001188642062__b5698181433710">tablescan</strong>, <strong id="EN-US_TOPIC_0000001188642062__b146871318133714">indexscan</strong>, and <strong id="EN-US_TOPIC_0000001188642062__b3823528103717">indexonlyscan</strong></li><li id="EN-US_TOPIC_0000001188642062__li171920216406">Sublink name hints</li><li id="EN-US_TOPIC_0000001188642062__li1845814451141">Skew hints, supporting only the skew in the redistribution involving Join or HashAgg</li><li id="EN-US_TOPIC_0000001188642062__li54401738103420">Hint used for <strong id="EN-US_TOPIC_0000001188642062__b189071334135311">Agg</strong> distribution columns Only clusters of 8.1.3.100 and later versions support this function.</li><li id="EN-US_TOPIC_0000001188642062__li197521416112414">Configuration parameter hints, supporting the parameters described in <a href="dws_04_0463.html">Configuration Parameter Hints</a></li></ul>
|
|
<div class="section" id="EN-US_TOPIC_0000001188642062__section19195171972812"><h4 class="sectiontitle">Precautions</h4><ul id="EN-US_TOPIC_0000001188642062__ul14701417175116"><li id="EN-US_TOPIC_0000001188642062__li147011917115115"><strong id="EN-US_TOPIC_0000001188642062__b178061813416">Sort</strong>, <strong id="EN-US_TOPIC_0000001188642062__b2802022204119">Setop</strong>, and <strong id="EN-US_TOPIC_0000001188642062__b6522994110">Subplan</strong> hints are not supported.</li><li id="EN-US_TOPIC_0000001188642062__li37011217115119">Hints do not support SMP or Node Groups.</li><li id="EN-US_TOPIC_0000001188642062__li8573348135914">Hints cannot be used for the target table of the <strong id="EN-US_TOPIC_0000001188642062__b1213301546">INSERT</strong> statement.</li></ul>
|
|
</div>
|
|
<div class="section" id="EN-US_TOPIC_0000001188642062__section671421102912"><a name="EN-US_TOPIC_0000001188642062__section671421102912"></a><a name="section671421102912"></a><h4 class="sectiontitle">Examples</h4><p id="EN-US_TOPIC_0000001188642062__p66216297298">The following is the original plan and is used for comparing with the optimized ones:</p>
|
|
</div>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001188642062__screen4673117425"><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></pre></div></td><td class="code"><div><pre><span></span><span class="k">explain</span>
|
|
<span class="k">select</span><span class="w"> </span><span class="n">i_product_name</span><span class="w"> </span><span class="n">product_name</span>
|
|
<span class="p">,</span><span class="n">i_item_sk</span><span class="w"> </span><span class="n">item_sk</span>
|
|
<span class="p">,</span><span class="n">s_store_name</span><span class="w"> </span><span class="n">store_name</span>
|
|
<span class="p">,</span><span class="n">s_zip</span><span class="w"> </span><span class="n">store_zip</span>
|
|
<span class="p">,</span><span class="n">ad2</span><span class="p">.</span><span class="n">ca_street_number</span><span class="w"> </span><span class="n">c_street_number</span>
|
|
<span class="p">,</span><span class="n">ad2</span><span class="p">.</span><span class="n">ca_street_name</span><span class="w"> </span><span class="n">c_street_name</span>
|
|
<span class="p">,</span><span class="n">ad2</span><span class="p">.</span><span class="n">ca_city</span><span class="w"> </span><span class="n">c_city</span>
|
|
<span class="p">,</span><span class="n">ad2</span><span class="p">.</span><span class="n">ca_zip</span><span class="w"> </span><span class="n">c_zip</span>
|
|
<span class="p">,</span><span class="k">count</span><span class="p">(</span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">cnt</span>
|
|
<span class="p">,</span><span class="k">sum</span><span class="p">(</span><span class="n">ss_wholesale_cost</span><span class="p">)</span><span class="w"> </span><span class="n">s1</span>
|
|
<span class="p">,</span><span class="k">sum</span><span class="p">(</span><span class="n">ss_list_price</span><span class="p">)</span><span class="w"> </span><span class="n">s2</span>
|
|
<span class="p">,</span><span class="k">sum</span><span class="p">(</span><span class="n">ss_coupon_amt</span><span class="p">)</span><span class="w"> </span><span class="n">s3</span>
|
|
<span class="k">FROM</span><span class="w"> </span><span class="n">store_sales</span>
|
|
<span class="p">,</span><span class="n">store_returns</span>
|
|
<span class="p">,</span><span class="n">store</span>
|
|
<span class="p">,</span><span class="n">customer</span>
|
|
<span class="p">,</span><span class="n">promotion</span>
|
|
<span class="p">,</span><span class="n">customer_address</span><span class="w"> </span><span class="n">ad2</span>
|
|
<span class="p">,</span><span class="n">item</span>
|
|
<span class="k">WHERE</span><span class="w"> </span><span class="n">ss_store_sk</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">s_store_sk</span><span class="w"> </span><span class="k">AND</span>
|
|
<span class="n">ss_customer_sk</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">c_customer_sk</span><span class="w"> </span><span class="k">AND</span>
|
|
<span class="n">ss_item_sk</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">i_item_sk</span><span class="w"> </span><span class="k">and</span>
|
|
<span class="n">ss_item_sk</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sr_item_sk</span><span class="w"> </span><span class="k">and</span>
|
|
<span class="n">ss_ticket_number</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sr_ticket_number</span><span class="w"> </span><span class="k">and</span>
|
|
<span class="n">c_current_addr_sk</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ad2</span><span class="p">.</span><span class="n">ca_address_sk</span><span class="w"> </span><span class="k">and</span>
|
|
<span class="n">ss_promo_sk</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">p_promo_sk</span><span class="w"> </span><span class="k">and</span>
|
|
<span class="n">i_color</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="p">(</span><span class="s1">'maroon'</span><span class="p">,</span><span class="s1">'burnished'</span><span class="p">,</span><span class="s1">'dim'</span><span class="p">,</span><span class="s1">'steel'</span><span class="p">,</span><span class="s1">'navajo'</span><span class="p">,</span><span class="s1">'chocolate'</span><span class="p">)</span><span class="w"> </span><span class="k">and</span>
|
|
<span class="n">i_current_price</span><span class="w"> </span><span class="k">between</span><span class="w"> </span><span class="mi">35</span><span class="w"> </span><span class="k">and</span><span class="w"> </span><span class="mi">35</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">10</span><span class="w"> </span><span class="k">and</span>
|
|
<span class="n">i_current_price</span><span class="w"> </span><span class="k">between</span><span class="w"> </span><span class="mi">35</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="k">and</span><span class="w"> </span><span class="mi">35</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">15</span>
|
|
<span class="k">group</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="n">i_product_name</span>
|
|
<span class="p">,</span><span class="n">i_item_sk</span>
|
|
<span class="p">,</span><span class="n">s_store_name</span>
|
|
<span class="p">,</span><span class="n">s_zip</span>
|
|
<span class="p">,</span><span class="n">ad2</span><span class="p">.</span><span class="n">ca_street_number</span>
|
|
<span class="p">,</span><span class="n">ad2</span><span class="p">.</span><span class="n">ca_street_name</span>
|
|
<span class="p">,</span><span class="n">ad2</span><span class="p">.</span><span class="n">ca_city</span>
|
|
<span class="p">,</span><span class="n">ad2</span><span class="p">.</span><span class="n">ca_zip</span>
|
|
<span class="p">;</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
<p id="EN-US_TOPIC_0000001188642062__p176997138358"><span><img id="EN-US_TOPIC_0000001188642062__image2699181316351" src="figure/en-us_image_0000001188482326.png"></span></p>
|
|
</div>
|
|
<div>
|
|
<div class="familylinks">
|
|
<div class="parentlink"><strong>Parent topic:</strong> <a href="dws_04_0454.html">Hint-based Tuning</a></div>
|
|
</div>
|
|
</div>
|
|
|