目錄
一、索引概述
1、什么叫索引
2、索引的作用
二、SQL Server索引下的數(shù)據(jù)組織結構
1.堆集結構
?2.聚集索引結構
3.非聚集索引
4.擴展盤區(qū)空間的管理
一、索引概述
1、什么叫索引
? ? ? ?數(shù)據(jù)庫中的索引與書籍中的索引類似,在一本書中,利用索引可以快速查找所需信息,無須閱讀整本書。在數(shù)據(jù)庫中,索引使數(shù)據(jù)庫程序無須對整個表進行掃描,就可以在其中找到所需數(shù)據(jù)。
? ? ? ? ?書中的索引是一個詞語列表,其中注明了包含各個詞的頁碼。而數(shù)據(jù)庫中的索引是某個表中一列或者若干列值的集合和相應的指向表中物理標識這些值的數(shù)據(jù)頁的邏輯指針清單。
?文章來源地址http://www.zghlxwxcb.cn/news/detail-443153.html
2、索引的作用
- 通過創(chuàng)建唯一索引,可以保證數(shù)據(jù)記錄的唯一性。
- 可以大大加快數(shù)據(jù)檢索速度。
- 可以加速表與表之間的連接,這一點在實現(xiàn)數(shù)據(jù)的參照完整性方面有特別的意義。
- 在使用ORDER BY和GROUP BY子句中進行檢索數(shù)據(jù)時,可以顯著減少查詢中分組和排序的時間。
- 使用索引可以在檢索數(shù)據(jù)的過程中使用優(yōu)化隱藏器,提高系統(tǒng)性能
二、SQL Server索引下的數(shù)據(jù)組織結構
在 SQL Server 數(shù)據(jù)庫內(nèi),索引對象作為 8 KB 頁的集合存儲。
SQL Server 支持視圖上的索引。視圖上第一個允許的索引是聚集索引。在視圖上執(zhí)行 CREATE INDEX 語句時,視圖的結果集被具體化,并且存儲在與有聚集索引的表具有相同結構的數(shù)據(jù)庫中。
每個表或索引視圖的數(shù)據(jù)行存儲在 8 KB 數(shù)據(jù)頁集合中。每個數(shù)據(jù)頁都有一個 96 字節(jié)的頁頭,其中包含象擁有該頁的表的標識符 (ID) 這樣的系統(tǒng)信息。如果頁鏈接在索引列表中,則頁頭還包含指向下一頁及前面用過的頁的指針。在頁尾有行偏移表。數(shù)據(jù)行填充頁的剩余部分。
1.堆集結構
堆集在 sysindexes 內(nèi)有一行,其 indid = 0。
sysindexes.FirstIAM 列指向 IAM 頁鏈的 IAM 首頁,IAM 頁鏈管理分配給堆集的空間。
SQL Server 2000 使用 IAM 頁在堆集中瀏覽。堆集內(nèi)的數(shù)據(jù)頁和行沒有任何特定的順序,也不鏈接在一起。數(shù)據(jù)頁之間唯一的邏輯連接是記錄在 IAM 頁內(nèi)的連接。
通過掃描 IAM 頁可以對堆集進行表掃描或串行讀,以找到容納這個堆集的頁的擴展盤區(qū)。因為 IAM 按擴展盤區(qū)在數(shù)據(jù)文件內(nèi)存在的順序表示它們,所以這意味著串行堆集掃描一律沿每個文件進行。使用 IAM 頁設置掃描順序還意味著堆集中的行一般不按照插入的順序返回。
?2.聚集索引結構
- 聚集索引對表的物理數(shù)據(jù)頁中的數(shù)據(jù)按列進行排序,然后再重新存儲到磁盤上,即聚集索引與數(shù)據(jù)是混為一體的,它的葉節(jié)點中存儲的是實際的數(shù)據(jù)。
- 每個表只能有一個聚集索引,因為數(shù)據(jù)行本身只能按一個順序存儲。
- 應當在創(chuàng)建任何非聚集索引之前創(chuàng)建聚集索引。
- 聚集索引的大小平均是表的5%。
- 在創(chuàng)建索引時系統(tǒng)需要比索引的表1.2倍的磁盤空間,索引創(chuàng)建完成后自動回收。
- 聚集索引在 sysindexes 內(nèi)有一行,其 indid = 1。數(shù)據(jù)鏈內(nèi)的頁和其內(nèi)的行按聚集索引鍵值排序。所有插入都在所插入行中的鍵值與排序順序相匹配時執(zhí)行。
- SQL Server2000 將索引組織為 B 樹。索引內(nèi)的每一頁包含一個頁首,頁首后面跟著索引行。每個索引行都包含一個鍵值以及一個指向較低級頁或數(shù)據(jù)行的指針。索引的每個頁稱為索引節(jié)點。B 樹的頂端節(jié)點稱為根節(jié)點。索引的底層節(jié)點稱為葉節(jié)點。每級索引中的頁鏈接在雙向鏈接列表中。在聚集索引內(nèi)數(shù)據(jù)頁組成葉節(jié)點。根和葉之間的任何索引級統(tǒng)稱為中間級。
- 對于聚集索引,sysindexes.root 指向它的頂端。SQL Server 沿著聚集索引瀏覽以找到聚集索引鍵對應的行。
?
?在lname列上創(chuàng)建索引后,查詢employee表可以看出表中記錄是按lname值的順序排列;刪除lname列上的聚集索引,而在emp_id上創(chuàng)建聚集索引后,表中記錄按照emp_id列值順序排列。
3.非聚集索引
- 非聚集索引具有完全獨立于數(shù)據(jù)行的結構,使用非聚集索引不用將物理數(shù)據(jù)頁中的數(shù)據(jù)按列排序。非聚集索引的葉節(jié)點存儲了組成非聚集索引的關鍵字值和行定位器。
- 如果索引時沒有指定索引類型,默認情況下為非聚集索引;
- 應當在創(chuàng)建非聚集索引之前創(chuàng)建聚集索引;
- 每個表最多可以創(chuàng)建249個非聚集索引;
- 最好在唯一值較多的列上創(chuàng)建非聚集索引;
- 經(jīng)常需要聯(lián)接和分組查詢,應在聯(lián)接和分組操作中使用的列上創(chuàng)建多個非聚集索引,在任何外鍵列上創(chuàng)建一個聚集索引。
- 非聚集索引與聚集索引一樣有 B 樹結構,但是有兩個重大差別:
1、數(shù)據(jù)行不按非聚集索引鍵的順序排序和存儲。
2、非聚集索引的葉層不包含數(shù)據(jù)頁。 相反,葉節(jié)點包含索引行。
- 非聚集索引可以在有聚集索引的表、堆集或索引視圖上定義。在 SQL Server 中,非聚集索引中的行定位器有兩種形式:
1、如果表是堆集(沒有聚集索引),行定位器就是指向行的指針。該指針用文件標識符 (ID)、頁碼和頁上的行數(shù)生成。整個指針稱為行 ID。
2、如果表有聚集索引,或者索引在索引視圖上,則行定位器就是行的聚集索引鍵。
?文章來源:http://www.zghlxwxcb.cn/news/detail-443153.html
4.擴展盤區(qū)空間的管理
索引分配映射表(IAM)頁映射數(shù)據(jù)庫文件中由堆集或索引使用的擴展盤區(qū)。
對于任何具有ntext、text和image類型的列的表,IAM頁還映射分配給這些類型的頁鏈的擴展盤區(qū)。
這些對象中的每一個都有由一個或多個記錄所有分配給自己的擴展盤區(qū)的IAM頁組成的鏈。
每個對象對每個包含擴展盤區(qū)的文件都至少有一個IAM。
如果分配給對象的文件上的擴展盤區(qū)的范圍超過了一個IAM頁可以記錄的范圍,則擴展盤區(qū)可能會在文件上有多個IAM頁。
?IAM頁按需要分配給每個對象,并在文件內(nèi)隨機定位。
Sysindexes.dbo.FirstIAM指向?qū)ο蟮腎AM首頁,這個對象的所有IAM 頁用鏈條鏈接在一起。
IAM 頁的頁首說明IAM所映射的擴展盤區(qū)范圍的起始擴展盤區(qū)。
IAM中還有大位圖,該位圖內(nèi)的每個位代表一個擴展盤區(qū)。
位圖的第一個位代表范圍內(nèi)的第一個擴展盤區(qū),第二個位代表范圍內(nèi)的第二個擴展盤區(qū),依此類推。
如果一個位是0,則不將它代表的擴展盤區(qū)分配給擁有該IAM的對象。如果這個位是1,則將它代表的擴展盤區(qū)分配給擁有該IAM頁的對象。
?
?
到了這里,關于索引的作用與結構(數(shù)據(jù)庫)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!