SQLServer查詢優(yōu)化 1 _索引的結(jié)構(gòu)與分類

SQLServer查詢優(yōu)化 1 _索引的結(jié)構(gòu)與分類

ID:40574025

大小:118.50 KB

頁數(shù):4頁

時間:2019-08-04

SQLServer查詢優(yōu)化 1 _索引的結(jié)構(gòu)與分類_第1頁
SQLServer查詢優(yōu)化 1 _索引的結(jié)構(gòu)與分類_第2頁
SQLServer查詢優(yōu)化 1 _索引的結(jié)構(gòu)與分類_第3頁
SQLServer查詢優(yōu)化 1 _索引的結(jié)構(gòu)與分類_第4頁
資源描述:

《SQLServer查詢優(yōu)化 1 _索引的結(jié)構(gòu)與分類》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫

1、一、索引的結(jié)構(gòu)關(guān)系型數(shù)據(jù)庫中以二維表來表達關(guān)系模型,表中的數(shù)據(jù)以頁的形式存儲在磁盤上,在SQLSERVER中,數(shù)據(jù)頁是磁盤上8k的連續(xù)空間,那么,一個表的所有數(shù)據(jù)頁在磁盤上是如何組織的呢?分兩種情況:一是數(shù)據(jù)頁間無序、隨機地存儲在磁盤上,這樣的表叫做堆表;二是數(shù)據(jù)頁間按某個表字段的值有序地存儲在磁盤上,這樣的表做索引組織表。索引是什么?從物理結(jié)構(gòu)上可分為兩種:聚集索引和非聚集索引。將表中的數(shù)據(jù)有序地組織起來的索引稱為聚集索引,一個表只有一個聚集索引,表上其他的索引都是非聚集索引。1.1、聚集索引結(jié)構(gòu)(1)聚集索引

2、將表內(nèi)的數(shù)據(jù)進行有序的組織,并不是指磁盤上數(shù)據(jù)頁內(nèi)數(shù)據(jù)的物理順序,也不是指數(shù)據(jù)頁在磁盤上的物理順序,而是數(shù)據(jù)頁間邏輯上以樹型結(jié)構(gòu)鏈接起來;createtablet(IDint,NAMEvarchar(100)AGEint,)GOINSERTINTOtVALUES(1,'張一',20)INSERTINTOtVALUES(2,'張二',25)INSERTINTOtVALUES(4,'張三',21)INSERTINTOtVALUES(5,'李二',23)INSERTINTOtVALUES(7,'李三',24)INSER

3、TINTOtVALUES(8,'李四',22)GOcreateCLUSTEREDindexIX_t_IDont(ID)(2)聚集索引的非葉子節(jié)點(即索引節(jié)點)行中,只包含下一節(jié)點的第一個鍵值及指向下一節(jié)點的指針,指針的格式為:文件編號+頁編號,長度為2Byte+4Byte=6Byte;(3)聚集索引的葉子節(jié)點行就是表中的數(shù)據(jù)行;(4)沒有聚集索引的表,結(jié)構(gòu)如下:堆表中的數(shù)據(jù)頁沒有經(jīng)過組織,隨機的存放在磁盤上,通過IAM頁進行管理,可以知道哪些數(shù)據(jù)頁屬于某個表以及數(shù)據(jù)頁的分配情況,對于數(shù)據(jù)頁的結(jié)構(gòu)及數(shù)據(jù)庫引擎對其管

4、理,這里不多作介紹,詳見《SQLServer存儲引擎》系列。(5)數(shù)據(jù)庫引擎根據(jù)系統(tǒng)目錄判斷當(dāng)前表是否為索引組織表,以選擇索引組織表的root_page或堆表的first_IAM_page及first_page,即可對表進行掃描;(6)索引組織表和堆表包含的數(shù)據(jù)行是一樣的,只是組織形式不同而已;1.2、非聚集索引結(jié)構(gòu)(1)非聚集索引是對聚集索引的索引;(2)非聚集索引的索引節(jié)點行和聚集索引一樣,只包含下一節(jié)點的第一個鍵值及指向下一節(jié)點的指針,指針的格式為:文件編號+頁編號,長度為2Byte+4Byte=6Byte

5、;(3)非聚集索引的葉子節(jié)點行存儲的是索引列和書簽。如果是索引組織表,書簽為聚集索引鍵;如果是堆表,書簽為ROWID,長度為8Byte,即數(shù)據(jù)頁號(4Byte)+文件號(2Byte)+槽號(2Byte)的行定位串;createNONCLUSTEREDindexIX_t_AGEont(AGE)GOSELECT*FROMtWHEREAGE=20此時想要根據(jù)年齡20來查找數(shù)據(jù)。如果是索引組織表,先根據(jù)AGE上的非聚集索引找到ID,此時ID值為1,然后再將ID=1帶入聚集索引進行等值查找,最終在聚集索引的葉子節(jié)點得到該行

6、的所有數(shù)據(jù);如果是堆表,先根據(jù)AGE找的應(yīng)該是ID=1這一行數(shù)據(jù)的8字節(jié)的ROWID,然后再根據(jù)這個ROWID去找到該行的所有數(shù)據(jù),即(1,'張一',20);(4)無論是聚集索引還是非聚集索引的葉子節(jié)點上都有一個指向上下頁的指針。二、索引分類1、SQLSERVER中索引分類(1)B+樹索引目前關(guān)系型數(shù)據(jù)庫中一種常見的索引組織結(jié)構(gòu)。B+樹,它是一多叉平衡排序樹,直到葉子節(jié)點才會命中數(shù)據(jù),以下簡稱B樹,可參見相關(guān)《數(shù)據(jù)結(jié)構(gòu)》的書籍;(2)、全文索引目前關(guān)系型數(shù)據(jù)庫一種基于標(biāo)記的索引組織結(jié)構(gòu),它不是B樹結(jié)構(gòu),而是基于要

7、索引的文本中的各個標(biāo)記來創(chuàng)建倒排、堆積且壓縮的索引結(jié)構(gòu)。(3)、XML索引隨著XML文本的應(yīng)用,在各個關(guān)系型數(shù)據(jù)庫中也相繼提供了對這種數(shù)據(jù)結(jié)構(gòu)的支持。XML實例作為二進制大型對象(BLOB)存儲在xml類型列中。對于列中的每個XML對象,索引將創(chuàng)建幾個數(shù)據(jù)行。該索引中的行數(shù)大約等于XML對象中的節(jié)點數(shù)。1.2、B樹索引的分類1.2.1、物理結(jié)構(gòu)分類(1)聚集索引根據(jù)索引列值,按B樹結(jié)構(gòu)對表內(nèi)數(shù)據(jù)進行組織;(2)非聚集索引對聚集索引的索引;1.2.2、列值唯一性分類(1)唯一索引表中索引列的值唯一。SQLSERVE

8、R在唯一性上認為NULL是相等的(ORACLE中唯一鍵是可以插入多個NULL值的),即唯一鍵中只允許出現(xiàn)一個NULL值,但在比較運算中認為NULL是不相等的,這點要注意;(2)非唯一索引表中索引列的值不唯一;1.2.3、列個數(shù)分類(1)復(fù)合索引包含多個列的索引;(2)單列索引只包含一個列的索引。1.2.4、特殊索引(1)計算列索引計算列上的索引;(2)視圖索引對視圖建立索

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

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

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