t-sql查詢進階--理解sql server中索引的概念,原理以及其他

t-sql查詢進階--理解sql server中索引的概念,原理以及其他

ID:21803255

大?。?81.00 KB

頁數(shù):9頁

時間:2018-10-24

t-sql查詢進階--理解sql server中索引的概念,原理以及其他_第1頁
t-sql查詢進階--理解sql server中索引的概念,原理以及其他_第2頁
t-sql查詢進階--理解sql server中索引的概念,原理以及其他_第3頁
t-sql查詢進階--理解sql server中索引的概念,原理以及其他_第4頁
t-sql查詢進階--理解sql server中索引的概念,原理以及其他_第5頁
資源描述:

《t-sql查詢進階--理解sql server中索引的概念,原理以及其他》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在教育資源-天天文庫。

1、簡介????????在SQLServer中,索引是一種增強式的存在,這意味著,即使沒有索引,SQLServer仍然可以實現(xiàn)應有的功能。但索引可以在大多數(shù)情況下大大提升查詢性能,在OLAP中尤其明顯.要完全理解索引的概念,需要了解大量原理性的知識,包括B樹,堆,數(shù)據(jù)庫頁,區(qū),填充因子,碎片,文件組等等一系列相關知識,這些知識寫一本小書也不為過。所以本文并不會深入討論這些主題。?索引是什么???索引是對數(shù)據(jù)庫表中一列或多列的值進行排序的一種結構,使用索引可快速訪問數(shù)據(jù)庫表中的特定信息。???精簡來說,索引是一種

2、結構.在SQLServer中,索引和表(這里指的是加了聚集索引的表)的存儲結構是一樣的,都是B樹,B樹是一種用于查找的平衡多叉樹.理解B樹的概念如下圖:??????理解為什么使用B樹作為索引和表(有聚集索引)的結構,首先需要理解SQLServer存儲數(shù)據(jù)的原理.???在SQLSERVER中,存儲的單位最小是頁(PAGE),頁是不可再分的。就像細胞是生物學中不可再分的,http://gexing.qqq80.com或是原子是化學中不可再分的最小單位一樣.這意味著,SQLSERVER對于頁的讀取,要么整個讀取,

3、要么完全不讀取,沒有折中.???在數(shù)據(jù)庫檢索來說,對于磁盤IO掃描是最消耗時間的.因為磁盤掃描涉及很多物理特性,這些是相當消耗時間的。所以B樹設計的初衷是為了減少對于磁盤的掃描次數(shù)。如果一個表或索引沒有使用B樹(對于沒有聚集索引的表是使用堆heap存儲),那么查找一個數(shù)據(jù),需要在整個表包含的數(shù)據(jù)庫頁中全盤掃描。這無疑會大大加重IO負擔.而在SQLSERVER中使用B樹進行存儲,則僅僅需要將B樹的根節(jié)點存入內(nèi)存,經(jīng)過幾次查找后就可以找到存放所需數(shù)據(jù)的被葉子節(jié)點包含的頁!進而避免的全盤掃描從而提高了性能.???

4、下面,通過一個例子來證明:????在SQLSERVER中,表上如果沒有建立聚集索引,則是按照堆(HEAP)存放的,假設我有這樣一張表:????????現(xiàn)在這張表上沒有任何索引,http://liebiao.wan128.cn也就是以堆存放,我通過在其上加上聚集索引(以B樹存放)來展現(xiàn)對IO的減少:?????理解聚集和聚集索引???在SQLSERVER中,最主要的兩類索引是聚集索引和非聚集索引??梢钥吹?,這兩個分類是圍繞聚集這個關鍵字進行的.那么首先要理解什么是聚集.???聚集在索引中的定義:???為了提高某

5、個屬性(或屬性組)的查詢速度,把這個或這些屬性(稱為聚集碼)上具有相同值的元組集中存放在連續(xù)的物理塊稱為聚集。???簡單來說,聚集索引就是:??????在SQLSERVER中,聚集的作用就是將某一列(或是多列)的物理順序改變?yōu)楹瓦壿嬳樞蛳嘁恢?比如,我從adventureworks數(shù)據(jù)庫的employee中抽取5條數(shù)據(jù):??????當我在ContactID上建立聚集索引時,再次查詢:??????在SQLSERVER中,聚集索引的存儲是以B樹存儲,B樹的葉子直接存儲聚集索引的數(shù)據(jù):??????因為聚集索引改變

6、的是其所在表的物理存儲順序,所以每個表只能有一個聚集索引.?非聚集索引????因為每個表只能有一個聚集索引,如果我們對一個表的查詢不僅僅限于在聚集索引上的字段。我們又對聚集索引列之外還有索引的要求,那么就需要非聚集索引了.????非聚集索引,本質上來說也是聚集索引的一種.非聚集索引并不改變其所在表的物理結構,而是額外生成一個聚集索引的B樹結構,但葉子節(jié)點是對于其所在表的引用,這個引用分為兩種,如果其所在表上沒有聚集索引,則引用行號。如果其所在表上已經(jīng)有了聚集索引,則引用聚集索引的頁.????一個簡單的非聚集

7、索引概念如下:????????可以看到,非聚集索引需要額外的空間進行存儲,按照被索引列進行聚集索引,并在B樹的葉子節(jié)點包含指向非聚集索引所在表的指針.????MSDN中,對于非聚集索引描述圖是:????????可以看到,非聚集索引也是一個B樹結構,與聚集索引不同的是,B樹的葉子節(jié)點存的是指向堆或聚集索引的指針.????通過非聚集索引的原理可以看出,如果其所在表的物理結構改變后,比如加上或是刪除聚集索引,那么所有非聚集索引都需要被重建,這個對于性能的損耗是相當大的。所以最好要先建立聚集索引,再建立對應的非聚集

8、索引.?聚集索引VS非聚集索引?????前面通過對于聚集索引和非聚集索引的原理解釋.我們不難發(fā)現(xiàn),大多數(shù)情況下,聚集索引的速度比非聚集索引要略快一些.因為聚集索引的B樹葉子節(jié)點直接存儲數(shù)據(jù),而非聚集索引還需要額外通過葉子節(jié)點的指針找到數(shù)據(jù).?????還有,對于大量連續(xù)數(shù)據(jù)查找,非聚集索引十分乏力,因為非聚集索引需要在非聚集索引的B樹中找到每一行的指針,再去其所在表上找數(shù)據(jù),性能因此會大打折扣.有時甚至不如不加非聚

當前文檔最多預覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學公式或PPT動畫的文件,查看預覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。