doc-exports/docs/dws/dev/dws_04_0477.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

168 lines
20 KiB
HTML

<a name="EN-US_TOPIC_0000001233883207"></a><a name="EN-US_TOPIC_0000001233883207"></a>
<h1 class="topictitle1">Case: Adding NOT NULL for JOIN Columns</h1>
<div id="body8662426"><p id="EN-US_TOPIC_0000001233883207__p191822154118">If there are many <strong id="EN-US_TOPIC_0000001233883207__b107033434439">NULL</strong> values in the <strong id="EN-US_TOPIC_0000001233883207__b2703243104316">JOIN</strong> columns, you can add the filter criterion <strong id="EN-US_TOPIC_0000001233883207__b370310432438">IS NOT NULL</strong> to filter data in advance to improve the <strong id="EN-US_TOPIC_0000001233883207__b1570414433433">JOIN</strong> efficiency.</p>
<div class="section" id="EN-US_TOPIC_0000001233883207__s9637491bba584706bfee3625a2200b94"><h4 class="sectiontitle">Before optimization</h4><div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001233883207__s571f4424b4c545e382eb118a1a6186bb"><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></pre></div></td><td class="code"><div><pre><span></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="p">(</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">STARTTIME</span><span class="w"> </span><span class="n">STTIME</span><span class="p">,</span>
<span class="w"> </span><span class="k">SUM</span><span class="p">(</span><span class="n">NVL</span><span class="p">(</span><span class="n">PAGE_DELAY_MSEL</span><span class="p">,</span><span class="mi">0</span><span class="p">))</span><span class="w"> </span><span class="n">PAGE_DELAY_MSEL</span><span class="p">,</span>
<span class="w"> </span><span class="k">SUM</span><span class="p">(</span><span class="n">NVL</span><span class="p">(</span><span class="n">PAGE_SUCCEED_TIMES</span><span class="p">,</span><span class="mi">0</span><span class="p">))</span><span class="w"> </span><span class="n">PAGE_SUCCEED_TIMES</span><span class="p">,</span>
<span class="w"> </span><span class="k">SUM</span><span class="p">(</span><span class="n">NVL</span><span class="p">(</span><span class="n">FST_PAGE_REQ_NUM</span><span class="p">,</span><span class="mi">0</span><span class="p">))</span><span class="w"> </span><span class="n">FST_PAGE_REQ_NUM</span><span class="p">,</span>
<span class="w"> </span><span class="k">SUM</span><span class="p">(</span><span class="n">NVL</span><span class="p">(</span><span class="n">PAGE_AVG_SIZE</span><span class="p">,</span><span class="mi">0</span><span class="p">))</span><span class="w"> </span><span class="n">PAGE_AVG_SIZE</span><span class="p">,</span>
<span class="w"> </span><span class="k">SUM</span><span class="p">(</span><span class="n">NVL</span><span class="p">(</span><span class="n">FST_PAGE_ACK_NUM</span><span class="p">,</span><span class="mi">0</span><span class="p">))</span><span class="w"> </span><span class="n">FST_PAGE_ACK_NUM</span><span class="p">,</span>
<span class="w"> </span><span class="k">SUM</span><span class="p">(</span><span class="n">NVL</span><span class="p">(</span><span class="n">DATATRANS_DW_DURATION</span><span class="p">,</span><span class="mi">0</span><span class="p">))</span><span class="w"> </span><span class="n">DATATRANS_DW_DURATION</span><span class="p">,</span>
<span class="w"> </span><span class="k">SUM</span><span class="p">(</span><span class="n">NVL</span><span class="p">(</span><span class="n">PAGE_SR_DELAY_MSEL</span><span class="p">,</span><span class="mi">0</span><span class="p">))</span><span class="w"> </span><span class="n">PAGE_SR_DELAY_MSEL</span><span class="w"> </span>
<span class="w"> </span><span class="k">FROM</span>
<span class="w"> </span><span class="n">PS</span><span class="p">.</span><span class="n">SDR_WEB_BSCRNC_1DAY</span><span class="w"> </span><span class="n">SDR</span>
<span class="w"> </span><span class="k">INNER</span><span class="w"> </span><span class="k">JOIN</span><span class="w"> </span><span class="p">(</span><span class="k">SELECT</span>
<span class="w"> </span><span class="n">BSCRNC_ID</span><span class="p">,</span>
<span class="w"> </span><span class="n">BSCRNC_NAME</span><span class="p">,</span>
<span class="w"> </span><span class="n">ACCESS_TYPE</span><span class="p">,</span>
<span class="w"> </span><span class="n">ACCESS_TYPE_ID</span><span class="w"> </span>
<span class="w"> </span><span class="k">FROM</span>
<span class="w"> </span><span class="n">nethouse</span><span class="p">.</span><span class="n">DIM_LOC_BSCRNC</span><span class="w"> </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">BSCRNC_ID</span><span class="p">,</span>
<span class="w"> </span><span class="n">BSCRNC_NAME</span><span class="p">,</span>
<span class="w"> </span><span class="n">ACCESS_TYPE</span><span class="p">,</span>
<span class="w"> </span><span class="n">ACCESS_TYPE_ID</span><span class="p">)</span><span class="w"> </span><span class="n">DIM</span><span class="w"> </span>
<span class="w"> </span><span class="k">ON</span><span class="w"> </span><span class="n">SDR</span><span class="p">.</span><span class="n">BSCRNC_ID</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">DIM</span><span class="p">.</span><span class="n">BSCRNC_ID</span><span class="w"> </span>
<span class="w"> </span><span class="k">AND</span><span class="w"> </span><span class="n">DIM</span><span class="p">.</span><span class="n">ACCESS_TYPE_ID</span><span class="w"> </span><span class="k">IN</span><span class="w"> </span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">)</span><span class="w"> </span>
<span class="w"> </span><span class="k">INNER</span><span class="w"> </span><span class="k">JOIN</span><span class="w"> </span><span class="n">nethouse</span><span class="p">.</span><span class="n">DIM_RAT_MAPPING</span><span class="w"> </span><span class="n">RAT</span><span class="w"> </span>
<span class="w"> </span><span class="k">ON</span><span class="w"> </span><span class="p">(</span><span class="n">RAT</span><span class="p">.</span><span class="n">RAT</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">SDR</span><span class="p">.</span><span class="n">RAT</span><span class="p">)</span>
<span class="w"> </span><span class="k">WHERE</span>
<span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="p">(</span><span class="n">STARTTIME</span><span class="w"> </span><span class="o">&gt;=</span><span class="w"> </span><span class="mi">1461340800</span><span class="w"> </span>
<span class="w"> </span><span class="k">AND</span><span class="w"> </span><span class="n">STARTTIME</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="mi">1461427200</span><span class="p">)</span><span class="w"> </span><span class="p">)</span><span class="w"> </span>
<span class="w"> </span><span class="k">AND</span><span class="w"> </span><span class="n">RAT</span><span class="p">.</span><span class="n">ACCESS_TYPE_ID</span><span class="w"> </span><span class="k">IN</span><span class="w"> </span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">)</span><span class="w"> </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">STTIME</span><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="p">;</span>
</pre></div></td></tr></table></div>
</div>
<p id="EN-US_TOPIC_0000001233883207__a59185e456904480b8264c57f08ebd871"><a href="#EN-US_TOPIC_0000001233883207__f557f925b95334298a446cb27ba7f464a">Figure 1</a> shows the execution plan.</p>
<div class="fignone" id="EN-US_TOPIC_0000001233883207__f557f925b95334298a446cb27ba7f464a"><a name="EN-US_TOPIC_0000001233883207__f557f925b95334298a446cb27ba7f464a"></a><a name="f557f925b95334298a446cb27ba7f464a"></a><span class="figcap"><b>Figure 1 </b>Adding NOT NULL for JOIN columns (1)</span><br><span><img id="EN-US_TOPIC_0000001233883207__image1861710310137" src="figure/en-us_image_0000001233761911.jpg"></span></div>
</div>
<div class="section" id="EN-US_TOPIC_0000001233883207__s219c3cdc1804437781b85948e051e81c"><h4 class="sectiontitle">After optimization</h4><ol id="EN-US_TOPIC_0000001233883207__o148362895e0a45a58cd450a3d05deaf8"><li id="EN-US_TOPIC_0000001233883207__lf927ae8d2fd448c98d3ae6f5c6ee7c1c">As shown in <a href="#EN-US_TOPIC_0000001233883207__f557f925b95334298a446cb27ba7f464a">Figure 1</a>, the sequential scan phase is time consuming.</li><li id="EN-US_TOPIC_0000001233883207__ld12d25957c7c44aa829b7172a806f783">The JOIN performance is poor because a large number of null values exist in the JOIN column <strong id="EN-US_TOPIC_0000001233883207__b8673020098378">BSCRNC_ID</strong> of the PS.SDR_WEB_BSCRNC_1DAY table.<p id="EN-US_TOPIC_0000001233883207__a52b19204f15f43568799054b195407b5">Therefore, you are advised to manually add <strong id="EN-US_TOPIC_0000001233883207__b842352706171344">NOT NULL</strong> for <strong id="EN-US_TOPIC_0000001233883207__b84235270616859">JOIN</strong> columns in the statement, as shown below:</p>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001233883207__s873b1995a82c455c9dd2f0a6e9afe6f9"><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></pre></div></td><td class="code"><div><pre><span></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="p">(</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">STARTTIME</span><span class="w"> </span><span class="n">STTIME</span><span class="p">,</span>
<span class="w"> </span><span class="k">SUM</span><span class="p">(</span><span class="n">NVL</span><span class="p">(</span><span class="n">PAGE_DELAY_MSEL</span><span class="p">,</span><span class="mi">0</span><span class="p">))</span><span class="w"> </span><span class="n">PAGE_DELAY_MSEL</span><span class="p">,</span>
<span class="w"> </span><span class="k">SUM</span><span class="p">(</span><span class="n">NVL</span><span class="p">(</span><span class="n">PAGE_SUCCEED_TIMES</span><span class="p">,</span><span class="mi">0</span><span class="p">))</span><span class="w"> </span><span class="n">PAGE_SUCCEED_TIMES</span><span class="p">,</span>
<span class="w"> </span><span class="k">SUM</span><span class="p">(</span><span class="n">NVL</span><span class="p">(</span><span class="n">FST_PAGE_REQ_NUM</span><span class="p">,</span><span class="mi">0</span><span class="p">))</span><span class="w"> </span><span class="n">FST_PAGE_REQ_NUM</span><span class="p">,</span>
<span class="w"> </span><span class="k">SUM</span><span class="p">(</span><span class="n">NVL</span><span class="p">(</span><span class="n">PAGE_AVG_SIZE</span><span class="p">,</span><span class="mi">0</span><span class="p">))</span><span class="w"> </span><span class="n">PAGE_AVG_SIZE</span><span class="p">,</span>
<span class="w"> </span><span class="k">SUM</span><span class="p">(</span><span class="n">NVL</span><span class="p">(</span><span class="n">FST_PAGE_ACK_NUM</span><span class="p">,</span><span class="mi">0</span><span class="p">))</span><span class="w"> </span><span class="n">FST_PAGE_ACK_NUM</span><span class="p">,</span>
<span class="w"> </span><span class="k">SUM</span><span class="p">(</span><span class="n">NVL</span><span class="p">(</span><span class="n">DATATRANS_DW_DURATION</span><span class="p">,</span><span class="mi">0</span><span class="p">))</span><span class="w"> </span><span class="n">DATATRANS_DW_DURATION</span><span class="p">,</span>
<span class="w"> </span><span class="k">SUM</span><span class="p">(</span><span class="n">NVL</span><span class="p">(</span><span class="n">PAGE_SR_DELAY_MSEL</span><span class="p">,</span><span class="mi">0</span><span class="p">))</span><span class="w"> </span><span class="n">PAGE_SR_DELAY_MSEL</span><span class="w"> </span>
<span class="w"> </span><span class="k">FROM</span>
<span class="w"> </span><span class="n">PS</span><span class="p">.</span><span class="n">SDR_WEB_BSCRNC_1DAY</span><span class="w"> </span><span class="n">SDR</span>
<span class="w"> </span><span class="k">INNER</span><span class="w"> </span><span class="k">JOIN</span><span class="w"> </span><span class="p">(</span><span class="k">SELECT</span>
<span class="w"> </span><span class="n">BSCRNC_ID</span><span class="p">,</span>
<span class="w"> </span><span class="n">BSCRNC_NAME</span><span class="p">,</span>
<span class="w"> </span><span class="n">ACCESS_TYPE</span><span class="p">,</span>
<span class="w"> </span><span class="n">ACCESS_TYPE_ID</span><span class="w"> </span>
<span class="w"> </span><span class="k">FROM</span>
<span class="w"> </span><span class="n">nethouse</span><span class="p">.</span><span class="n">DIM_LOC_BSCRNC</span><span class="w"> </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">BSCRNC_ID</span><span class="p">,</span>
<span class="w"> </span><span class="n">BSCRNC_NAME</span><span class="p">,</span>
<span class="w"> </span><span class="n">ACCESS_TYPE</span><span class="p">,</span>
<span class="w"> </span><span class="n">ACCESS_TYPE_ID</span><span class="p">)</span><span class="w"> </span><span class="n">DIM</span><span class="w"> </span>
<span class="w"> </span><span class="k">ON</span><span class="w"> </span><span class="n">SDR</span><span class="p">.</span><span class="n">BSCRNC_ID</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">DIM</span><span class="p">.</span><span class="n">BSCRNC_ID</span><span class="w"> </span>
<span class="w"> </span><span class="k">AND</span><span class="w"> </span><span class="n">DIM</span><span class="p">.</span><span class="n">ACCESS_TYPE_ID</span><span class="w"> </span><span class="k">IN</span><span class="w"> </span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">)</span><span class="w"> </span>
<span class="w"> </span><span class="k">INNER</span><span class="w"> </span><span class="k">JOIN</span><span class="w"> </span><span class="n">nethouse</span><span class="p">.</span><span class="n">DIM_RAT_MAPPING</span><span class="w"> </span><span class="n">RAT</span><span class="w"> </span>
<span class="w"> </span><span class="k">ON</span><span class="w"> </span><span class="p">(</span><span class="n">RAT</span><span class="p">.</span><span class="n">RAT</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">SDR</span><span class="p">.</span><span class="n">RAT</span><span class="p">)</span>
<span class="w"> </span><span class="k">WHERE</span>
<span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="p">(</span><span class="n">STARTTIME</span><span class="w"> </span><span class="o">&gt;=</span><span class="w"> </span><span class="mi">1461340800</span><span class="w"> </span>
<span class="w"> </span><span class="k">AND</span><span class="w"> </span><span class="n">STARTTIME</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="mi">1461427200</span><span class="p">)</span><span class="w"> </span><span class="p">)</span><span class="w"> </span>
<span class="w"> </span><span class="k">AND</span><span class="w"> </span><span class="n">RAT</span><span class="p">.</span><span class="n">ACCESS_TYPE_ID</span><span class="w"> </span><span class="k">IN</span><span class="w"> </span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">)</span><span class="w"> </span>
<span class="w"> </span><span class="k">and</span><span class="w"> </span><span class="n">SDR</span><span class="p">.</span><span class="n">BSCRNC_ID</span><span class="w"> </span><span class="k">is</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="k">GROUP</span><span class="w"> </span><span class="k">BY</span>
<span class="w"> </span><span class="n">STTIME</span><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="n">A</span><span class="p">;</span>
</pre></div></td></tr></table></div>
</div>
<p id="EN-US_TOPIC_0000001233883207__adfced1fbebb24bb89b3fe43e647c0950"><a href="#EN-US_TOPIC_0000001233883207__fig376817271615">Figure 2</a> shows the execution plan.</p>
<div class="fignone" id="EN-US_TOPIC_0000001233883207__fig376817271615"><a name="EN-US_TOPIC_0000001233883207__fig376817271615"></a><a name="fig376817271615"></a><span class="figcap"><b>Figure 2 </b>Adding NOT NULL for JOIN columns (2)</span><br><span><img id="EN-US_TOPIC_0000001233883207__en-us_topic_0085132209_image689822582316" src="figure/en-us_image_0000001493802070.jpg"></span></div>
</li></ol>
</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>