<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8">
<meta name="generator" content="pdf2htmlEX">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<link rel="stylesheet" href="https://static.pudn.com/base/css/base.min.css">
<link rel="stylesheet" href="https://static.pudn.com/base/css/fancy.min.css">
<link rel="stylesheet" href="https://static.pudn.com/prod/directory_preview_static/6265f8cb4c65f4125921eabd/raw.css">
<script src="https://static.pudn.com/base/js/compatibility.min.js"></script>
<script src="https://static.pudn.com/base/js/pdf2htmlEX.min.js"></script>
<script>
try{
pdf2htmlEX.defaultViewer = new pdf2htmlEX.Viewer({});
}catch(e){}
</script>
<title></title>
</head>
<body>
<div id="sidebar" style="display: none">
<div id="outline">
</div>
</div>
<div id="pf1" class="pf w0 h0" data-page-no="1"><div class="pc pc1 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/6265f8cb4c65f4125921eabd/bg1.jpg"><div class="c x1 y1 w2 h2"><div class="t m0 x2 h3 y2 ff1 fs0 fc0 sc0 ls0 ws0">适用<span class="_ _0"></span>于<span class="_ _1"></span>适用<span class="_ _0"></span>于<span class="_ _2"></span><span class="ff2">Vis<span class="_ _0"></span>ual <span class="_ _0"></span>Stu<span class="_ _0"></span>dio<span class="_ _0"></span>SQL<span class="_ _0"></span> Op<span class="_ _0"></span>tim<span class="_ _0"></span>izer<span class="_ _0"></span></span>:使<span class="_ _0"></span>用<span class="_ _1"></span>:使<span class="_ _0"></span>用<span class="_ _2"></span><span class="ff2">Que<span class="_ _0"></span>st</span></div><div class="t m0 x2 h3 y3 ff2 fs0 fc0 sc0 ls0 ws0">Sof<span class="_ _0"></span>twa<span class="_ _0"></span>re<span class="ff1">的<span class="_ _0"></span>此扩<span class="_ _0"></span>展程<span class="_ _0"></span>序自<span class="_ _0"></span>动使<span class="_ _0"></span>查询<span class="_ _0"></span>更快<span class="_ _3"></span>的此<span class="_ _0"></span>扩展<span class="_ _0"></span>程序<span class="_ _0"></span>自动<span class="_ _0"></span>使查<span class="_ _0"></span>询更<span class="_ _0"></span>快<span class="_ _2"></span><span class="ff2">-</span>源码<span class="_ _4"></span>源码</span></div><div class="t m0 x2 h4 y4 ff1 fs1 fc0 sc0 ls0 ws0">介绍<span class="_ _5"></span>介绍</div><div class="t m0 x2 h5 y5 ff1 fs2 fc0 sc0 ls0 ws0">在开发过<span class="_ _0"></span>程中优化<span class="_ _0"></span><span class="ff3">SQL</span>语句<span class="_ _0"></span>可以确保<span class="_ _0"></span>您的应用<span class="_ _0"></span>程序以最<span class="_ _0"></span>佳性能运<span class="_ _0"></span>行,而不<span class="_ _0"></span>会给数据<span class="_ _0"></span>库造成过<span class="_ _0"></span>多负担,<span class="_ _0"></span>从而可以<span class="_ _0"></span>节省大量<span class="_ _0"></span>时间和</div><div class="t m0 x2 h5 y6 ff1 fs2 fc0 sc0 ls0 ws0">金钱。<span class="ff3"> </span>本<span class="_ _0"></span>文将介绍<span class="_ _0"></span><span class="ff3">Visual St<span class="_ _0"></span>udio</span>开发<span class="_ _0"></span>人员如何<span class="_ _0"></span>在不需要<span class="_ _0"></span><span class="ff3">DBA</span>技能的<span class="_ _0"></span>情况下解<span class="_ _0"></span>决<span class="ff3">SQL S<span class="_ _0"></span>erver</span>性<span class="_ _0"></span>能问题。</div><div class="t m0 x2 h4 y7 ff2 fs1 fc0 sc0 ls0 ws0">Visu<span class="_ _0"></span>al St<span class="_ _0"></span>udio <span class="_ _0"></span>Devel<span class="_ _0"></span>oper<span class="ff1">与<span class="_ _6"></span>与<span class="_ _0"></span><span class="ff2">S<span class="_ _0"></span>QL S<span class="_ _0"></span>erver<span class="_ _0"></span> DBA</span></span></div><div class="t m0 x2 h5 y8 ff1 fs2 fc0 sc0 ls0 ws0">一个很容<span class="_ _0"></span>易在开发<span class="_ _0"></span>过程中迷<span class="_ _0"></span>失的事实<span class="_ _0"></span>是,可以<span class="_ _0"></span>优化<span class="ff3">SQ<span class="_ _0"></span>L</span>语句。<span class="_ _0"></span><span class="ff3"> </span>执行计<span class="_ _0"></span>划,逻辑<span class="_ _0"></span>读取,<span class="ff3">C<span class="_ _0"></span>PU</span>时间等<span class="_ _0"></span>概念似乎<span class="_ _0"></span>令人困惑<span class="_ _0"></span>,并留给</div><div class="t m0 x2 h5 y9 ff1 fs2 fc0 sc0 ls0 ws0">了<span class="ff3">SQL S<span class="_ _0"></span>erver D<span class="_ _0"></span>BA</span>。<span class="_ _0"></span><span class="ff3"> </span>因此,<span class="_ _0"></span>在将应用<span class="_ _0"></span>程序从开<span class="_ _0"></span>发转移到<span class="_ _0"></span>生产之前<span class="_ _0"></span>,应用程<span class="_ _0"></span>序不会调<span class="_ _0"></span>整<span class="ff3">SQL</span>性<span class="_ _0"></span>能。<span class="_ _0"></span><span class="ff3"> DBA</span>敏锐<span class="_ _0"></span>地意识到<span class="_ _0"></span>在生产</div><div class="t m0 x2 h5 ya ff1 fs2 fc0 sc0 ls0 ws0">中调整应<span class="_ _0"></span>用程序<span class="ff3">S<span class="_ _0"></span>QL</span>的性能<span class="_ _0"></span>成本。<span class="_ _0"></span><span class="ff3"> </span>但是,<span class="_ _0"></span>他们还认<span class="_ _0"></span>识到,过<span class="_ _0"></span>去,开发<span class="_ _0"></span>人员不具<span class="_ _0"></span>备执行<span class="ff3">S<span class="_ _0"></span>QL</span>调优所<span class="_ _0"></span>需的丰富<span class="_ _0"></span>知识。</div><div class="t m0 x2 h4 yb ff2 fs1 fc0 sc0 ls0 ws0">SQL<span class="_ _0"></span> Serv<span class="_ _0"></span>er<span class="ff1">查询<span class="_ _5"></span>查询</span></div><div class="t m0 x2 h5 yc ff1 fs2 fc0 sc0 ls0 ws0">您知道如<span class="_ _0"></span>何编写<span class="ff3 fs3">S<span class="_ _0"></span>ELECT<span class="fs2"> </span></span>,<span class="_ _0"></span><span class="ff3"> <span class="fs3">INSERT</span> </span>,<span class="ff3"> <span class="fs3">UPD<span class="_ _0"></span>ATE</span></span>和<span class="ff3 fs3">DELETE<span class="_ _0"></span></span>语句。<span class="ff3"> </span>但是<span class="_ _0"></span>您知道吗<span class="_ _0"></span>,实际上<span class="_ _0"></span>有成千上<span class="_ _0"></span>万种方法<span class="_ _0"></span>可以编写<span class="_ _0"></span><span class="ff3">SQL</span>语句<span class="_ _0"></span>并产</div><div class="t m0 x2 h5 yd ff1 fs2 fc0 sc0 ls0 ws0">生完全相<span class="_ _0"></span>同的结果<span class="_ _0"></span>?<span class="ff3"> </span>当您向<span class="_ _0"></span><span class="ff3">SQL Ser<span class="_ _0"></span>ver</span>发出查<span class="_ _0"></span>询时,它<span class="_ _0"></span>将在执行<span class="_ _0"></span>语句之前<span class="_ _0"></span>处理该语<span class="_ _0"></span>句。<span class="ff3"> </span>它将查找<span class="_ _0"></span>主键,索<span class="_ _0"></span>引,排序<span class="_ _0"></span>和其他</div><div class="t m0 x2 h5 ye ff1 fs2 fc0 sc0 ls0 ws0">各种因素<span class="_ _0"></span>。<span class="ff3"> </span>考虑到<span class="_ _0"></span>这些因素<span class="_ _0"></span>以及其他<span class="_ _0"></span>统计信息<span class="_ _0"></span>,<span class="ff3">SQL S<span class="_ _0"></span>erver</span>将生<span class="_ _0"></span>成一个执<span class="_ _0"></span>行计划。<span class="ff3"> </span>该计<span class="_ _0"></span>划确定服<span class="_ _0"></span>务器将如<span class="_ _0"></span>何收集您<span class="_ _0"></span><span class="ff3">SQL</span>要</div><div class="t m0 x2 h5 yf ff1 fs2 fc0 sc0 ls0 ws0">求的记录<span class="_ _0"></span>。<span class="ff3"> SQL</span>语<span class="_ _0"></span>句编写方<span class="_ _0"></span>式的变化<span class="_ _0"></span>将导致<span class="ff3">SQ<span class="_ _0"></span>L Serve<span class="_ _0"></span>r</span>创建不同<span class="_ _0"></span>的执行计<span class="_ _0"></span>划。<span class="ff3"> </span>不<span class="_ _0"></span>同的执行<span class="_ _0"></span>计划会导<span class="_ _0"></span>致<span class="ff3">SQL S<span class="_ _0"></span>erver</span>更改<span class="_ _0"></span>其收</div><div class="t m0 x2 h5 y10 ff1 fs2 fc0 sc0 ls0 ws0">集记录的<span class="_ _0"></span>方式。<span class="ff3"> </span>这<span class="_ _0"></span>些变体中<span class="_ _0"></span>的每一个<span class="_ _0"></span>在不同的<span class="_ _0"></span>级别上执<span class="_ _0"></span>行,有些<span class="_ _0"></span>变慢,有<span class="_ _0"></span>些变快。<span class="_ _0"></span><span class="ff3"> </span>寻找最快<span class="_ _0"></span><span class="ff3">SQL</span>语句编<span class="_ _0"></span>写方法是<span class="_ _0"></span>提高数据<span class="_ _0"></span>库</div><div class="t m0 x2 h5 y11 ff1 fs2 fc0 sc0 ls0 ws0">应用程序<span class="_ _0"></span>性能的关<span class="_ _0"></span>键。<span class="ff3"> Que<span class="_ _0"></span>st Softw<span class="_ _0"></span>are</span>提供的<span class="_ _0"></span>类似<span class="ff3">Visu<span class="_ _0"></span>al Studio<span class="_ _0"></span>SQL Opt<span class="_ _0"></span>imizer</span>的工<span class="_ _0"></span>具可了解<span class="_ _0"></span>执行计划<span class="_ _0"></span>的每个细<span class="_ _0"></span>节以及相</div><div class="t m0 x2 h5 y12 ff1 fs2 fc0 sc0 ls0 ws0">关的统计<span class="_ _0"></span>信息,并<span class="_ _0"></span>使用此信<span class="_ _0"></span>息来优化<span class="_ _0"></span><span class="ff3">SQL</span>语句<span class="_ _0"></span>。</div><div class="t m0 x2 h4 y13 ff1 fs1 fc0 sc0 ls0 ws0">这个怎<span class="_ _0"></span>么运<span class="_ _0"></span>作<span class="_ _7"></span>这个怎<span class="_ _0"></span>么运<span class="_ _0"></span>作</div><div class="t m0 x2 h5 y14 ff1 fs2 fc0 sc0 ls0 ws0">检查原始<span class="_ _0"></span>查询以查<span class="_ _0"></span>看可以对<span class="_ _0"></span>其应用哪<span class="_ _0"></span>种转换。<span class="_ _0"></span><span class="ff3"> </span>您过去可<span class="_ _0"></span>能考虑过<span class="_ _0"></span>的简单转<span class="_ _0"></span>换是在<span class="ff3">w<span class="_ _0"></span>here</span>子句<span class="_ _0"></span>中使用<span class="ff3 fs3">IN<span class="_ _0"></span><span class="fs2"> </span></span>,<span class="ff3"> <span class="fs3">EXISTS</span></span>或链接的<span class="ff3 fs3">O<span class="_ _0"></span>R</span></div><div class="t m0 x2 h5 y15 ff1 fs2 fc0 sc0 ls0 ws0">。<span class="ff3"> SQL O<span class="_ _0"></span>ptimizer</span>引<span class="_ _0"></span>擎知道许<span class="_ _0"></span>多这样的<span class="_ _0"></span>转换,但<span class="_ _0"></span>转换的复<span class="_ _0"></span>杂度各不<span class="_ _0"></span>相同。<span class="ff3"> </span>应<span class="_ _0"></span>用转换后<span class="_ _0"></span>,它将查<span class="_ _0"></span>看结果语<span class="_ _0"></span>句,再次<span class="_ _0"></span>检查它们<span class="_ _0"></span>以</div><div class="t m0 x2 h5 y16 ff1 fs2 fc0 sc0 ls0 ws0">查看可以<span class="_ _0"></span>应用哪些<span class="_ _0"></span>转换。</div><div class="t m0 x2 h5 y17 ff1 fs2 fc0 sc0 ls0 ws0">图<span class="ff3">1.</span>将<span class="ff3">S<span class="_ _0"></span>QL</span>转换为<span class="_ _0"></span>许多重写</div><div class="t m0 x2 h5 y18 ff1 fs2 fc0 sc0 ls0 ws0">在此过程<span class="_ _0"></span>仅进行了<span class="_ _0"></span>几次迭代<span class="_ _0"></span>之后,它<span class="_ _0"></span>产生了许<span class="_ _0"></span>多不同的<span class="_ _0"></span>方式来编<span class="_ _0"></span>写相同<span class="ff3">S<span class="_ _0"></span>QL</span>语句。<span class="_ _0"></span><span class="ff3"> </span>使用<span class="_ _0"></span>基于集合<span class="_ _0"></span>论的数学<span class="_ _0"></span>模型,可<span class="_ _0"></span>以保证原</div><div class="t m0 x2 h5 y19 ff1 fs2 fc0 sc0 ls0 ws0">始语句的<span class="_ _0"></span>每次重写<span class="_ _0"></span>在语义上<span class="_ _0"></span>都是等效<span class="_ _0"></span>的。<span class="ff3"> </span>换句<span class="_ _0"></span>话说,它<span class="_ _0"></span>们在执行<span class="_ _0"></span>时都会产<span class="_ _0"></span>生相同的<span class="_ _0"></span>记录。<span class="ff3"> </span>最<span class="_ _0"></span>后,使用<span class="_ _0"></span>人工智能<span class="_ _0"></span><span class="ff3">“</span>反馈搜索<span class="_ _0"></span><span class="ff3">”</span>引</div><div class="t m0 x2 h5 y1a ff1 fs2 fc0 sc0 ls0 ws0">擎,用于<span class="_ _0"></span><span class="ff3">Visual S<span class="_ _0"></span>tudioSQL<span class="_ _0"></span> Optimize<span class="_ _0"></span>r</span>提供了编<span class="_ _0"></span>写<span class="ff3">SQL</span>语<span class="_ _0"></span>句的最佳<span class="_ _0"></span>方法。<span class="_ _0"></span><span class="ff3"> </span>结果是<span class="_ _0"></span>优化了<span class="ff3">SQ<span class="_ _0"></span>L</span>。</div><div class="t m0 x2 h4 y1b ff1 fs1 fc0 sc0 ls0 ws0">直接在<span class="_ _8"></span>直接在<span class="_ _2"></span><span class="ff2">Visu<span class="_ _0"></span>al S<span class="_ _0"></span>tudio<span class="_ _0"></span></span>内部优<span class="_ _0"></span>化<span class="_ _1"></span>内部<span class="_ _0"></span>优化<span class="_ _2"></span><span class="ff2">SQL</span></div><div class="t m0 x2 h5 y1c ff1 fs2 fc0 sc0 ls0 ws0">用于<span class="ff3">Visu<span class="_ _0"></span>al Studio<span class="_ _0"></span>SQL Opt<span class="_ _0"></span>imizer</span>扩展<span class="_ _0"></span>了<span class="ff3">Visua<span class="_ _0"></span>l Studio</span>,<span class="_ _0"></span>以允许任<span class="_ _0"></span>何开发人<span class="_ _0"></span>员利用此<span class="_ _0"></span>过程来轻<span class="_ _0"></span>松优化其<span class="_ _0"></span><span class="ff3">SQL</span>语句<span class="_ _0"></span>。</div><div class="t m0 x2 h5 y1d ff1 fs2 fc0 sc0 ls0 ws0">安装<span class="ff3">SQ<span class="_ _0"></span>L Optimiz<span class="_ _0"></span>er</span>之后,<span class="_ _0"></span>右键单击<span class="_ _0"></span>任何<span class="ff3">“</span>解决<span class="_ _0"></span>方案<span class="ff3">”</span>或<span class="_ _0"></span><span class="ff3">“</span>项目<span class="ff3">”</span>节<span class="_ _0"></span>点以在您<span class="_ _0"></span>的应用程<span class="_ _0"></span>序中找到<span class="_ _0"></span>所有<span class="ff3">SQL</span>。<span class="_ _0"></span><span class="ff3"> </span>与您<span class="_ _0"></span>的应用程<span class="_ _0"></span>序关联</div><div class="t m0 x2 h5 y1e ff1 fs2 fc0 sc0 ls0 ws0">的所有源<span class="_ _0"></span>代码都将<span class="_ _0"></span>被扫描以<span class="_ _0"></span>查找<span class="ff3">SQ<span class="_ _0"></span>L</span>语句。</div></div></div><div class="pi" data-data='{"ctm":[1.611639,0.000000,0.000000,1.611639,0.000000,0.000000]}'></div></div>
</body>
</html>