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>
119 lines
15 KiB
HTML
119 lines
15 KiB
HTML
<a name="EN-US_TOPIC_0000001460562888"></a><a name="EN-US_TOPIC_0000001460562888"></a>
|
|
|
|
<h1 class="topictitle1">Plan Hint Optimization</h1>
|
|
<div id="body1536647564178"><p id="EN-US_TOPIC_0000001460562888__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_0000001460562888__section54351718142011"><h4 class="sectiontitle">Function</h4><p id="EN-US_TOPIC_0000001460562888__p1281023874112">Plan hints can be specified using the keywords such as <strong id="EN-US_TOPIC_0000001460562888__b130715317491">SELECT</strong>, <strong id="EN-US_TOPIC_0000001460562888__b260485474914">INSERT</strong>, <strong id="EN-US_TOPIC_0000001460562888__b914816566495">UPDATE</strong>, <strong id="EN-US_TOPIC_0000001460562888__b2172193195012">MERGE</strong>, and <strong id="EN-US_TOPIC_0000001460562888__b1228815510501">DELETE</strong>, in the following format:</p>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001460562888__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_0000001460562888__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 keyword of this subquery.</p>
|
|
</div>
|
|
<p id="EN-US_TOPIC_0000001460562888__p7688030104742">For example:</p>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001460562888__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_0000001460562888__p6698226910490">In the preceding command, <<em id="EN-US_TOPIC_0000001460562888__i9538165419448">plan_hint1</em>> and <<em id="EN-US_TOPIC_0000001460562888__i76071059164415">plan_hint2</em>> are the hints of a query, and <<em id="EN-US_TOPIC_0000001460562888__i159702299456">plan_hint3</em>> is the hint of its subquery.</p>
|
|
<div class="notice" id="EN-US_TOPIC_0000001460562888__note1172193415435"><span class="noticetitle"><img src="public_sys-resources/notice_3.0-en-us.png"> </span><div class="noticebody"><p id="EN-US_TOPIC_0000001460562888__p95011638124318">If a hint is specified in the <strong id="EN-US_TOPIC_0000001460562888__b1427417124489">CREATE VIEW</strong> statement, the hint will be applied each time this view is used.</p>
|
|
<p id="EN-US_TOPIC_0000001460562888__p29571631215312">If the random plan function is enabled (<strong id="EN-US_TOPIC_0000001460562888__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_0000001460562888__section1748920122313"><h4 class="sectiontitle">Supported Hints</h4><p id="EN-US_TOPIC_0000001460562888__p595686132716">Currently, the following hints are supported:</p>
|
|
</div>
|
|
<ul id="EN-US_TOPIC_0000001460562888__ul119219210409"><li id="EN-US_TOPIC_0000001460562888__li219214264019">Join order hints (<strong id="EN-US_TOPIC_0000001460562888__b43196256388">leading</strong>)</li><li id="EN-US_TOPIC_0000001460562888__li71923213401">Join operation hints, excluding the <strong id="EN-US_TOPIC_0000001460562888__b1884865214562">semi join</strong>, <strong id="EN-US_TOPIC_0000001460562888__b19969115515617">anti join</strong>, and <strong id="EN-US_TOPIC_0000001460562888__b1432965915611">unique plan</strong> hints</li><li id="EN-US_TOPIC_0000001460562888__li51928244018">Rows hints</li><li id="EN-US_TOPIC_0000001460562888__li1219215210403">Stream operation hints</li><li id="EN-US_TOPIC_0000001460562888__li3192102134010">Scan operation hints, supporting only <strong id="EN-US_TOPIC_0000001460562888__b5698181433710">tablescan</strong>, <strong id="EN-US_TOPIC_0000001460562888__b146871318133714">indexscan</strong>, and <strong id="EN-US_TOPIC_0000001460562888__b3823528103717">indexonlyscan</strong></li><li id="EN-US_TOPIC_0000001460562888__li171920216406">Sublink name hints</li><li id="EN-US_TOPIC_0000001460562888__li1845814451141">Skew hints, supporting only the skew in the redistribution involving Join or HashAgg</li><li id="EN-US_TOPIC_0000001460562888__li54401738103420">Hint used for <strong id="EN-US_TOPIC_0000001460562888__b5516165614311">Agg</strong> distribution columns Only clusters of 8.1.3.100 and later versions support this function.</li><li id="EN-US_TOPIC_0000001460562888__li11045591132">Hint that disables subquery pull-up. Only clusters of 8.2.0 and later versions support this function.</li><li id="EN-US_TOPIC_0000001460562888__li197521416112414">Configuration parameter hints. For details about supported parameters, see <a href="dws_04_0463.html">Configuration Parameter Hints</a>.</li></ul>
|
|
<div class="section" id="EN-US_TOPIC_0000001460562888__section19195171972812"><h4 class="sectiontitle">Precautions</h4><ul id="EN-US_TOPIC_0000001460562888__ul14701417175116"><li id="EN-US_TOPIC_0000001460562888__li147011917115115"><strong id="EN-US_TOPIC_0000001460562888__b178061813416">Sort</strong>, <strong id="EN-US_TOPIC_0000001460562888__b2802022204119">Setop</strong>, and <strong id="EN-US_TOPIC_0000001460562888__b6522994110">Subplan</strong> hints are not supported.</li><li id="EN-US_TOPIC_0000001460562888__li37011217115119">Hints do not support SMP or Node Groups.</li><li id="EN-US_TOPIC_0000001460562888__li8573348135914">Hints cannot be used for the target table of the <strong id="EN-US_TOPIC_0000001460562888__b798613135104030">INSERT</strong> statement.</li></ul>
|
|
</div>
|
|
<div class="section" id="EN-US_TOPIC_0000001460562888__section671421102912"><a name="EN-US_TOPIC_0000001460562888__section671421102912"></a><a name="section671421102912"></a><h4 class="sectiontitle">Examples</h4><p id="EN-US_TOPIC_0000001460562888__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_0000001460562888__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_0000001460562888__p176997138358"><span><img id="EN-US_TOPIC_0000001460562888__image2699181316351" src="figure/en-us_image_0000001510402793.png" height="226.4325" width="523.6875" title="Click to enlarge" class="imgResize"></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>
|
|
|
|
|
|
<script language="JavaScript">
|
|
<!--
|
|
image_size('.imgResize');
|
|
var msg_imageMax = "view original image";
|
|
var msg_imageClose = "close";
|
|
//--></script> |