1.數據庫引入了索引
用戶(hù)對數據庫最頻繁的操作是進(jìn)行數據查詢(xún)。一般情況下,數據庫在進(jìn)行查詢(xún)操作時(shí)需要對整個(gè)表進(jìn)行數據搜索。當表中的數據很多時(shí),搜索數據就需要很長(cháng)的時(shí)間,這就造成了服務(wù)器的資源浪費。為了提高檢索數據的能力,數據庫引入了索引機制。
2.有關(guān)“索引”的比喻
從某種程度上,可以把數據庫看作一本書(shū),把索引看作書(shū)的目錄,通過(guò)目錄查找書(shū)中的信息,顯然較沒(méi)有目錄的書(shū)方便、快捷。
3.數據庫索引實(shí)際是什么?(兩部分組成)
索引是一個(gè)單獨的、物理的數據庫結構,它是某個(gè)表中一列或若干列值的集合和相應的指向表中物理標識這些值的數據頁(yè)的邏輯指針清單。
4.索引在表中的角色
一個(gè)表的存儲是由兩部分組成的,一部分用來(lái)存放表的數據頁(yè)面,另一部分存放索引頁(yè)面。索引就存放在索引頁(yè)面上,
5.索引高效原理
通常,索引頁(yè)面相對于數據頁(yè)面來(lái)說(shuō)小得多。當進(jìn)行數據檢索時(shí),系統先搜索索引頁(yè)面,從中找到所需數據的指針,再直接通過(guò)指針從數據頁(yè)面中讀取數據。
6.索引的分類(lèi)
在SQL Server 的數據庫中按存儲結構的不同將索引分為兩類(lèi):簇索引(Clustered Index)和非簇索引(Nonclustered Index)。
1)簇索引對表的物理數據頁(yè)中的數據按列進(jìn)行排序,然后再重新存儲到磁盤(pán)上,即簇索引與數據是混為一體,的它的葉節點(diǎn)中存儲的是實(shí)際的數據。由于簇索引對表中的數據一一進(jìn)行了排序,因此用簇索引查找數據很快。但由于簇索引將表的所有數據完全重新排列了,它所需要的空間也就特別大,大概相當于表中數據所占空間的120% 。表的數據行只能以一種排序方式存儲在磁盤(pán)上,所以一個(gè)表只能有一個(gè)簇索引。
2)非簇索引具有與表的數據完全分離的結構,使用非簇索引不用將物理數據頁(yè)中的數據按列排序。非簇索引的葉節點(diǎn)中存儲了組成非簇索引的關(guān)鍵字的值和行定位器。行定位器的結構和存儲內容取決于數據的存儲方式。如果數據是以簇索引方式存儲的,則行定位器中存儲的是簇索引的索引鍵;如果數據不是以簇索引方式存儲的,這種方式又稱(chēng)為堆存儲方式(Heap Structure),則行定位器存儲的是指向數據行的指針。非簇索引將行定位器按關(guān)鍵字的值用一定的方式排序,這個(gè)順序與表的行在數據頁(yè)中的排序是不匹配的。由于非簇索引使用索引頁(yè)存儲因此它比簇索引需要更多的存儲空間且檢索效率較低但一個(gè)表只能建一個(gè)簇索引,當用戶(hù)需要建立多個(gè)索引時(shí)就需要使用非簇索引了。
小結:Clustered Index 是與物理數據混在一起并對物理數據進(jìn)重排,就像使用拼音查字典;Unclustered Index 是與物理數據完全分離的,利用額外空間對關(guān)鍵字進(jìn)行重排,就像使用部首查字典。
聯(lián)系客服