SQLServer查詢優化 1 _索引的結構與分類.doc_第1頁
SQLServer查詢優化 1 _索引的結構與分類.doc_第2頁
SQLServer查詢優化 1 _索引的結構與分類.doc_第3頁
SQLServer查詢優化 1 _索引的結構與分類.doc_第4頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

一、索引的結構關系型數據庫中以二維表來表達關系模型,表中的數據以頁的形式存儲在磁盤上,在SQL SERVER中,數據頁是磁盤上8k的連續空間,那么,一個表的所有數據頁在磁盤上是如何組織的呢?分兩種情況:一是數據頁間無序、隨機地存儲在磁盤上,這樣的表叫做堆表;二是數據頁間按某個表字段的值有序地存儲在磁盤上,這樣的表做索引組織表。索引是什么?從物理結構上可分為兩種:聚集索引和非聚集索引。將表中的數據有序地組織起來的索引稱為聚集索引,一個表只有一個聚集索引,表上其他的索引都是非聚集索引。1.1、聚集索引結構(1)聚集索引將表內的數據進行有序的組織,并不是指磁盤上數據頁內數據的物理順序,也不是指數據頁在磁盤上的物理順序,而是數據頁間邏輯上以樹型結構鏈接起來;create table t(ID int,NAME varchar(100)AGE int,)GOINSERT INTO t VALUES(1,張一,20)INSERT INTO t VALUES(2,張二,25)INSERT INTO t VALUES(4,張三,21)INSERT INTO t VALUES(5,李二,23)INSERT INTO t VALUES(7,李三,24)INSERT INTO t VALUES(8,李四,22)GOcreate CLUSTERED index IX_t_ID on t(ID)(2)聚集索引的非葉子節點(即索引節點)行中,只包含下一節點的第一個鍵值及指向下一節點的指針,指針的格式為:文件編號+頁編號,長度為2Byte+4Byte=6Byte;(3)聚集索引的葉子節點行就是表中的數據行;(4)沒有聚集索引的表,結構如下:堆表中的數據頁沒有經過組織,隨機的存放在磁盤上,通過IAM頁進行管理,可以知道哪些數據頁屬于某個表以及數據頁的分配情況,對于數據頁的結構及數據庫引擎對其管理,這里不多作介紹,詳見SQL Server 存儲引擎系列。(5)數據庫引擎根據系統目錄判斷當前表是否為索引組織表,以選擇索引組織表的root_page或堆表的first_IAM_page及first_page,即可對表進行掃描;(6)索引組織表和堆表包含的數據行是一樣的,只是組織形式不同而已;1.2、非聚集索引結構(1)非聚集索引是對聚集索引的索引;(2)非聚集索引的索引節點行和聚集索引一樣,只包含下一節點的第一個鍵值及指向下一節點的指針,指針的格式為:文件編號+頁編號,長度為2Byte+4Byte=6Byte;(3)非聚集索引的葉子節點行存儲的是索引列和書簽。如果是索引組織表,書簽為聚集索引鍵;如果是堆表,書簽為ROWID,長度為8Byte,即數據頁號(4Byte)+文件號(2Byte)+槽號(2Byte)的行定位串;create NONCLUSTERED index IX_t_AGE on t(AGE)GOSELECT * FROM t WHERE AGE=20此時想要根據年齡20來查找數據。如果是索引組織表,先根據AGE上的非聚集索引找到ID,此時ID值為1,然后再將ID=1帶入聚集索引進行等值查找,最終在聚集索引的葉子節點得到該行的所有數據;如果是堆表,先根據AGE找的應該是ID=1這一行數據的8字節的ROWID,然后再根據這個ROWID去找到該行的所有數據,即(1,張一,20);(4)無論是聚集索引還是非聚集索引的葉子節點上都有一個指向上下頁的指針。二、索引分類1、SQL SERVER中索引分類(1)B+樹索引目前關系型數據庫中一種常見的索引組織結構。B+樹,它是一多叉平衡排序樹,直到葉子節點才會命中數據,以下簡稱B樹,可參見相關數據結構的書籍;(2)、全文索引目前關系型數據庫一種基于標記的索引組織結構,它不是B樹結構,而是基于要索引的文本中的各個標記來創建倒排、堆積且壓縮的索引結構。(3)、XML索引隨著XML文本的應用,在各個關系型數據庫中也相繼提供了對這種數據結構的支持。XML 實例作為二進制大型對象 (BLOB) 存儲在 xml 類型列中。對于列中的每個 XML對象,索引將創建幾個數據行。該索引中的行數大約等于 XML對象中的節點數。1.2、B樹索引的分類1.2.1、物理結構分類(1)聚集索引根據索引列值,按B樹結構對表內數據進行組織;(2)非聚集索引對聚集索引的索引;1.2.2、列值唯一性分類(1)唯一索引表中索引列的值唯一。SQL SERVER在唯一性上認為NULL是相等的(ORACLE中唯一鍵是可以插入多個NULL值的),即唯一鍵中只允許出現一個NULL值,但在比較運算中認為NULL是不相等的,這點要注意;(2)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論