SQL查询优化详解SQL Server非聚集索引.docx
只希核E例序他度运用道具0发衣1:2011-12-29在SO1.SERVER中.*聚集索引儿女可以行作是一个含,:聚集索外的表.做相比实斥的表而;;Il聚集索引中所存储的衣的列数RF许多.因为Il聚集索引M仅包含以表中H釐的列和指向实与构理表的指针.并Il.对Tll聚集崇引我来说我中所存放的列站依禽聚集累来进行存放的.所以ft找速废然快/许多.用是对于性fg的榨取来说.SQ1.SERVER总用的理所使,假如仅仅是通过索叨洗可以在B树的叶尸节点荻得所甯牧械,而不再用通过叶了节点上的IS针去责找实际的物理表.那性能的提升将会更胜%.下面我们来看下实现这点的几种方式.尊聚«引的Ut正加IW面简介所说,用聚泰索引其实可以行作个聚«引我.当这个小聚集索引中包含.代询所须要的全部信息时.则道前不再须要去钱说玳本我.肉仅仅足从I;聚集索引就能得到数M:1«6之656|566601.2nSu再,MInZ在5kdll叩1QMqiNd二8T-R非野专引IT168网站V.IT168.COM下面初冬聚集案91如何的:在advnlureW(xks的SalGsOrderHeader左中.现在只有CustomerID<Il*91.flBaToAddresslDi/4,我们的合询安排为是这样:宜南公依抠CustOinerID列上的聚集索引找到相应的指圻席,人从本袅IJt找救据,从执行安柞可以Si象,这个效率并不快,卜面我们来右网Ai或引.通过在CustomerIDfBlInAddresslD上建立非聚集索引,我f闱次到了上面饯词语句的:通过他展率明"以"到执行安井简洁到不傥丹荷沽,广脆从Il聚集索引的叶子H点搬取刎数据无需叫仙猫些本表!这一性能的提升可以从K)统it杼出然下IBi我们来看有权港索引和没有艘鲍索用的IOiWtt:UtNIt;.fj¾Rf:Fia».mTMtr».FeIZt.bfOI«.I”碉站WW.IT168.COM索引的用羡不仅仪带家的是筑率的提升,还芍并发的提升,因为削总了对此本表的依靠,所以提升了并发.从而削发了死锁I三JWINC1.UDE的魔力上面的索引国忐所带来的效率提升就像魔术解,但别尔急,正如我通G费调的样,CVCryIhinghaSpwe.但如一个索引包含广大多的攘的话,也会帝来许多剧作用,INC1.UDE的作用使用季聚集索引中可以包畲更多的列,但不作为Ir运用.比如:但议我们上面的那个套询须要增加一列.则旗来建立的冬引无法进行榄舲,从而还须要SS找第木S-在谊新列上Jt立非聚集索引,iMC1.mfSMTeuiSff.*t><ttVaKtXerm*:>TOeXtt-eor*g-sc1;CNSlea.SalevCTderHcaaer<CuatOMrID.BI17cMdzes*XD>UK1.PDt<SufcTozali(I!是祖M*y含SUbTotaI这个总金粉.,1U*也显得太比,因为我们的业务很少依据il单价格作为代加条件,撼运用INC1.UDE建立素引:*;一嚏立去引:.,|CUATE!KtIC1.OSTEUDXKCKXct-coveW-SCSO*Sales-SaleeOraetKeadertBlllTcAddtesaIDk9瞠立索引2io!CRtAnWohclcsttmdindcxg.jooygjsow,f)11OKSaXei.Sale*OrO«rN«»dertCu*tMrXD)13SE1.ZCTCU9tc三erID.BillTQAddressID14F>C<ldvencxVork9).(Sle>.(Sa*rtf*rK*der)3,WKCMCUfrAS”2DBmYCMHBSr3*S(x8Jttfl81(三iRHW:1O3即孵INC1.UDE包畲的利和索引it立的则可以这样理制.杷上述建.W6-INC1.UDE的H聚集索兄想便成:aM5""sM5幅帽幡燃幡幅幡MCSX222ttS75MVW72192½M5112Maa431MM73tttK744(*t(M15刈第7234WiSU54X)7724偏向“本询存、nh<ie>)非IT168网站WW.IT168.COMcustonl(>JeW运用INC1.UDE可以削减叶子t5的大小I善聚集索引的交二Ii*Mt9l力女Mfi以行作此梭为专叫的护帐!由于许多缘由,比如:在生产环境中我们往往不能像上Bl建立温第索引那样随惠改动现仃索力.这"Ji½导致的”X站你介史就见的板客户打电话关WT现仃的卡聚集索引U经很-宽.你InB接着拓宽则堵改萩帝来的忡僮卜降的成木会岛过提高有由带来的好处这时候你可以通过热外也,上索引.IFal我的向捉我的.:1;聚集*切的本城是我通过颔外也迂衣色抻几个“聚集索引之间进行像去样的Jon从而使Il聚集火引之间可以进行Join来在.不访问加本我的状况下访也彻优化器供应所须要的数据:比M还足匕hl的瞄个例子.我们须察仅取SaIesOrderHeader&,通过Ba(ToAddreSSlD.CustomerID作为选坏条件可以通过建立两个索引进行下向我们来行执行女排:今聚集累的连接F聚集索引的在接不实I是口聚集索引的交叉的种特例.使汨多个IlIMrt即空呈后可以理/所嬖ft加的数据,从而使得从俄出ft加桂本改变成了完全不用奁询M本代:一嚏立索引:CiIZArtJKeC1.OSTeMOISroEXt>t-ecvere-OHSales.SalesOrderKeader(BlllTeAddxesaXDt蝮立索引2CMATlNotIC1.OSTZUDINDEX3,J-8.S82OXSalesaSalesOrderReader(CuatoserID)SttXCTCosc<三erXD.BillTQMdrcssIDFMCK(JkdvencareV0rlr9J.tSle.(SaSOrOerMeader)T*jg哄1.(与该败有关的1古调升的:;0"KMtBZrU3t<三etXD<7<AXDBlTc皿e”;A9BS比加还是上面那两个甯引.这时我只查询m聚集索用中立上的故蜘,如完全不再须要杳询些木衣:行起来这样的It谢意义不大?但当你把代询条件变为号时咻?谯*蛤定转出时.还是有普定实以意义的.|!聚集索用的过ift许匕时候.我们并不须要将戡6表中索引列的全解索引,比如说含彳/NU1.1.的也不粕用被索引,或并依据详细的业务场b有一线数据M不想索引。这样可以:削H索弓I的大小Ifc1JifitJrtr,从而使如对索引的吉褥得到了加速小索引对干埔胞改的维护性能公更高比如说,如F语句:UllS1.XCT(.ucmerXD,PurchaseOrderKuni>er19FRCK(AdvncurWorks.(Sls.Sl0rdrH*dr)20KK£R£PurchaaeOrderNusbcrISNOTMU1.1.I22_!二IfiSilI5%息表“lO=drH31.扫描计的*,逻瘠论也J物理读取。次,僧读。次,。?苟仕何索引T168RttWWWm68COM我们为Ki1.”聚集案引行:-320CREATENOHC1.USrEREDINDEX33JCZBEagjSOH2223;21ONSales.SalesOrderHeader(CustonerID,PurchaseOrderNuaberSE1.ECTCustcBerID.PurcbaaeOrderHuxDberFROM(AdventureKorks).(Sal«9)(SolesOrderHeaderKHtRtPurchaieOrderNunberZSMOTHU1.1.二结果口消息080«>|/K力71丁表SC.2rdr)¼S1.扫描计敷:,沙瘠读取&物理流取。次,覆读。次,IT168利站WWWm68CoM这时我们为M加匕过滋条件形成过浓索引:,9一建立过您2TCttATENOttC1.USTEREDXNDCXS3J-gjSOHONSales.SalesOrderHeader(CuetoaerID,PurchaseOrderHuidDer>WHEREPurchaseOrcierNuatoerISTNU1.1.SE1.ECTCu9tonrXDP*O,"drNu11<brFROM(AdvntuxWork>J(Sales.(S*l>OdrHead<rWH£R£PurchasexdezUmberISNOTNU1.1.口话献a剧8物理读取。次,M读。次,<386行受1纯,、,表,SCcOrSrHMS1.扫描计数X,逻锚读T168R!½WV.IT168M由上面我们可以而出.运用过戏索引的场景叁和详细的业务场景相关,对于为大量相同的奇询条件it立过滤索引使得性能进一步提JHAtH本文从介绍了SQ1.SERVER中Il聚集索引的那馅,连横,交叉和过处,对于我们林一点从SQ1.SERVER榨取的性解的提升沱往会伴随希勿方面的牺弊.作为数据库的开发人员或者背理人员来说,以仝御的学问来做好权衡将会是特别甲要.系统的学力数据昨的学问不似能大求制M造林读的数拼也隹m城客户打电话-关照”的次数