數(shù)據(jù)庫基礎(chǔ):講解MySQL索引的概念及數(shù)據(jù)庫索引的應(yīng)用

字號:

1.數(shù)據(jù)庫引入了索引
    用戶對數(shù)據(jù)庫最頻繁的操作是進行數(shù)據(jù)查詢。一般情況下,數(shù)據(jù)庫在進行查詢操作時需要對整個表進行數(shù)據(jù)搜索。當(dāng)表中的數(shù)據(jù)很多時,搜索數(shù)據(jù)就需要很長的時間,這就造成了服務(wù)器的資源浪費。為了提高檢索數(shù)據(jù)的能力,數(shù)據(jù)庫引入了索引機制。
    2.有關(guān)“索引”的比喻
    從某種程度上,可以把數(shù)據(jù)庫看作一本書,把索引看作書的目錄,通過目錄查找書中的信息,顯然較沒有目錄的書方便、快捷。
    3.數(shù)據(jù)庫索引實際是什么?(兩部分組成)
    索引是一個單獨的、物理的數(shù)據(jù)庫結(jié)構(gòu),它是某個表中一列或若干列值的集合和相應(yīng)的指向表中物理標(biāo)識這些值的數(shù)據(jù)頁的邏輯指針清單。
    4.索引在表中的角色
    一個表的存儲是由兩部分組成的,一部分用來存放表的數(shù)據(jù)頁面,另一部分存放索引頁面。索引就存放在索引頁面上,
    5.索引高效原理
    通常,索引頁面相對于數(shù)據(jù)頁面來說小得多。當(dāng)進行數(shù)據(jù)檢索時,系統(tǒng)先搜索索引頁面,從中找到所需數(shù)據(jù)的指針,再直接通過指針從數(shù)據(jù)頁面中讀取數(shù)據(jù)。
    6.索引的分類
    在SQL Server 的數(shù)據(jù)庫中按存儲結(jié)構(gòu)的不同將索引分為兩類:簇索引(Clustered Index)和非簇索引(Nonclustered Index)。
    (1)簇索引對表的物理數(shù)據(jù)頁中的數(shù)據(jù)按列進行排序,然后再重新存儲到磁盤上,即簇索引與數(shù)據(jù)是混為一體,的它的葉節(jié)點中存儲的是實際的數(shù)據(jù)。由于簇索引對表中的數(shù)據(jù)一一進行了排序,因此用簇索引查找數(shù)據(jù)很快。但由于簇索引將表的所有數(shù)據(jù)完全重新排列了,它所需要的空間也就特別大,大概相當(dāng)于表中數(shù)據(jù)所占空間的120% 。表的數(shù)據(jù)行只能以一種排序方式存儲在磁盤上,所以一個表只能有一個簇索引。
    (2)非簇索引具有與表的數(shù)據(jù)完全分離的結(jié)構(gòu),使用非簇索引不用將物理數(shù)據(jù)頁中的數(shù)據(jù)按列排序。非簇索引的葉節(jié)點中存儲了組成非簇索引的關(guān)鍵字的值和行定位器。行定位器的結(jié)構(gòu)和存儲內(nèi)容取決于數(shù)據(jù)的存儲方式。如果數(shù)據(jù)是以簇索引方式存儲的,則行定位器中存儲的是簇索引的索引鍵;如果數(shù)據(jù)不是以簇索引方式存儲的,這種方式又稱為堆存儲方式(Heap Structure),則行定位器存儲的是指向數(shù)據(jù)行的指針。非簇索引將行定位器按關(guān)鍵字的值用一定的方式排序,這個順序與表的行在數(shù)據(jù)頁中的排序是不匹配的。由于非簇索引使用索引頁存儲因此它比簇索引需要更多的存儲空間且檢索效率較低但一個表只能建一個簇索引,當(dāng)用戶需要建立多個索引時就需要使用非簇索引了。
    小結(jié):Clustered Index 是與物理數(shù)據(jù)混在一起并對物理數(shù)據(jù)進重排,就像使用拼音查字典;Unclustered Index 是與物理數(shù)據(jù)完全分離的,利用額外空間對關(guān)鍵字進行重排,就像使用部首查字典。
    數(shù)據(jù)庫索引應(yīng)用
    一、索引的概念
    索引就是加快檢索表中數(shù)據(jù)的方法。數(shù)據(jù)庫的索引類似于書籍的索引。在書籍中,索引允許用戶不必翻閱完整個書就能迅速地找到所需要的信息。在數(shù)據(jù)庫中,索引也允許數(shù)據(jù)庫程序迅速地找到表中的數(shù)據(jù),而不必掃描整個數(shù)據(jù)庫。
    二、索引的特點
    1.索引可以加快數(shù)據(jù)庫的檢索速度
    2.索引降低了數(shù)據(jù)庫插入、修改、刪除等維護任務(wù)的速度
    3.索引創(chuàng)建在表上,不能創(chuàng)建在視圖上
    4.索引既可以直接創(chuàng)建,也可以間接創(chuàng)建
    5.可以在優(yōu)化隱藏中,使用索引
    6.使用查詢處理器執(zhí)行SQL語句,在一個表上,一次只能使用一個索引
    7.其他
    三、索引的優(yōu)點
    1.創(chuàng)建性索引,保證數(shù)據(jù)庫表中每一行數(shù)據(jù)的性
    2.大大加快數(shù)據(jù)的檢索速度,這也是創(chuàng)建索引的最主要的原因
    3.加速表和表之間的連接,特別是在實現(xiàn)數(shù)據(jù)的參考完整性方面特別有意義。
    4.在使用分組和排序子句進行數(shù)據(jù)檢索時,同樣可以顯著減少查詢中分組和排序的時間。
    5.通過使用索引,可以在查詢的過程中使用優(yōu)化隱藏器,提高系統(tǒng)的性能。