sql server 索引基础知识----聚集索引,非聚集索引

sql server 索引基础知识----聚集索引,非聚集索引

ID:1495871

大小:240.00 KB

页数:9页

时间:2017-11-12

上传者:U-2462
sql server 索引基础知识----聚集索引,非聚集索引_第1页
sql server 索引基础知识----聚集索引,非聚集索引_第2页
sql server 索引基础知识----聚集索引,非聚集索引_第3页
sql server 索引基础知识----聚集索引,非聚集索引_第4页
sql server 索引基础知识----聚集索引,非聚集索引_第5页
资源描述:

《sql server 索引基础知识----聚集索引,非聚集索引》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

不论是聚集索引,还是非聚集索引,都是用B+树来实现的。我们在了解这两种索引之前,需要先了解B+树。如果你对B树不了解的话,建议参看以下几篇文章:BTree,B-Tree,B+Tree,B*Tree都是什么http://blog.csdn.net/manesking/archive/2007/02/09/1505979.aspxB+树的结构图:B+树的特点:·所有关键字都出现在叶子结点的链表中(稠密索引),且链表中的关键字恰好是有序的;·不可能在非叶子结点命中;·非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储(关键字)数据的数据层;B+树中增加一个数据,或者删除一个数据,需要分多种情况处理,比较复杂,这里就不详述这个内容了。 聚集索引(ClusteredIndex)·聚集索引的叶节点就是实际的数据页·在数据页中数据按照索引顺序存储·行的物理位置和行在索引中的位置是相同的·每个表只能有一个聚集索引·聚集索引的平均大小大约为表大小的5%左右 下面是两副简单描述聚集索引的示意图: 在聚集索引中执行下面语句的的过程:select*fromtablewherefirstName='Ota' 一个比较抽象点的聚集索引图示:  非聚集索引(UnclusteredIndex)  ·非聚集索引的页,不是数据,而是指向数据页的页。·若未指定索引类型,则默认为非聚集索引·叶节点页的次序和表的物理存储次序不同·每个表最多可以有249个非聚集索引·在非聚集索引创建之前创建聚集索引(否则会引发索引重建)在非聚集索引中执行下面语句的的过程:select*fromemployeewherelname='Green' 一个比较抽象点的非聚集索引图示:  什么是BookmarkLookup虽然SQL2005中已经不在提 BookmarkLookup了(换汤不换药),但是我们的很多搜索都是用的这样的搜索过程,如下:先在非聚集中找,然后再在聚集索引中找。  在http://www.sqlskills.com/提供的一个例子中,就给我们演示了BookmarkLookup 比TableScan慢的情况,例子的脚本如下:USECREDITgo--ThesesamplesusetheCreditdatabase.Youcandownloadandrestorethe--creditdatabasefromhere:--http://www.sqlskills.com/resources/conferences/CreditBackup80.zip--NOTE:ThisisaSQLServer2000backupandMANYexampleswillworkon--SQLServer2000inadditiontoSQLServer2005.---------------------------------------------------------------------------------(1)Createtwotableswhicharecopiesofcharge:------------------------------------------------------------------------------- --CreatetheHEAPSELECT*INTOChargeHeapFROMChargego--CreatetheCLTableSELECT*INTOChargeCLFROMChargegoCREATECLUSTEREDINDEXChargeCL_CLIndONChargeCL(member_no,charge_no)go---------------------------------------------------------------------------------(2)Addthesamenon-clusteredindexestoBOTHofthesetables:---------------------------------------------------------------------------------CreatetheNCindexontheHEAPCREATEINDEXChargeHeap_NCIndONChargeHeap(Charge_no)go--CreatetheNCindexontheCLTableCREATEINDEXChargeCL_NCIndONChargeCL(Charge_no)go---------------------------------------------------------------------------------(3)BegintoquerythesetablesandseewhatkindofaccessandI/Oreturns---------------------------------------------------------------------------------Getreadyforabitofanalysis:SETSTATISTICSIOON--TurnGraphicalShowplanON(Ctrl+K)--First,apointquery(also,seehowabookmarklookuplooksin2005)SELECT*FROMChargeHeapWHERECharge_no=12345goSELECT*FROMChargeCLWHERECharge_no=12345go --Whatifourqueryislessselective?--1000is.0625%ofourdata...(1,600,000millionrows)SELECT*FROMChargeHeapWHERECharge_no<1000goSELECT*FROMChargeCLWHERECharge_no<1000go--Whatifourqueryislessselective?--16000is1%ofourdata...(1,600,000millionrows)SELECT*FROMChargeHeapWHERECharge_no<16000goSELECT*FROMChargeCLWHERECharge_no<16000go---------------------------------------------------------------------------------(4)What'stheEXACTpercentagewherethebookmarklookupisn'tworthit?---------------------------------------------------------------------------------Whathappenshere:TableScanorBookmarklookup?SELECT*FROMChargeHeapWHERECharge_no<4000goSELECT*FROMChargeCLWHERECharge_no<4000go--Whathappenshere:TableScanorBookmarklookup?SELECT*FROMChargeHeapWHERECharge_no<3000goSELECT*FROMChargeCLWHERECharge_no<3000go--And-youcannarrowitdownbytryingthemiddleground:--Whathappenshere:TableScanorBookmarklookup?SELECT*FROMChargeHeapWHERECharge_no<3500goSELECT*FROMChargeCLWHERECharge_no<3500 go--Andagain:SELECT*FROMChargeHeapWHERECharge_no<3250goSELECT*FROMChargeCLWHERECharge_no<3250go--Andagain:SELECT*FROMChargeHeapWHERECharge_no<3375goSELECT*FROMChargeCLWHERECharge_no<3375go--Don'tworry,Iwon'tmakeyougothroughitall:)--FortheHeapTable(inTHIScase),thecutoffis:0.21%SELECT*FROMChargeHeapWHERECharge_no<3383goSELECT*FROMChargeHeapWHERECharge_no<3384go--FortheClusteredTable(inTHIScase),thecut-offis:0.21%SELECT*FROMChargeCLWHERECharge_no<3438SELECT*FROMChargeCLWHERECharge_no<3439go这个例子也就是吴家震在Teched2007上的那个演示例子。小结:这篇博客只是简单的用几个图表来介绍索引的实现方法:B+数,聚集索引,非聚集索引,BookmarkLookup的信息而已。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭