數(shù)據(jù)庫(kù)索引小記

一、通俗解釋

數(shù)據(jù)庫(kù)索引就是在一個(gè)或者幾個(gè)列上創(chuàng)建的一種用于提高數(shù)據(jù)庫(kù)查詢速度的對(duì)象,可以把它想象成字典中的目錄。

沒(méi)有索引的話,查詢照樣可以執(zhí)行,但是查找時(shí)需要全表掃描,逐條掃描全部記錄,直到找完符合條件的。

索引查詢可以避免全表掃描,多數(shù)查詢可以僅掃描少量索引頁(yè)及數(shù)據(jù)頁(yè),而不是遍歷所有數(shù)據(jù)頁(yè)。

二、索引的副作用:

沒(méi)有索引的表,執(zhí)行增、刪、改的時(shí)候很快,但是使用索引以后,會(huì)多一個(gè)維護(hù)索引的操作,導(dǎo)致增(insert)、刪(delete)、改(update)的性能下降。

三、數(shù)據(jù)庫(kù)索引的存儲(chǔ):

一條索引記錄中包含的基本信息包括:健值(即定義索引時(shí)所指定的所有字段的值,)+邏輯指針(指向數(shù)據(jù)頁(yè)或者另一索引頁(yè))。

當(dāng)你為一張空表創(chuàng)建索引時(shí),數(shù)據(jù)庫(kù)系統(tǒng)將為你分配一個(gè)索引頁(yè),該索引頁(yè)在你插入數(shù)據(jù)前一直是空的,此頁(yè)此時(shí)即是根節(jié)點(diǎn),也是葉節(jié)點(diǎn)。每當(dāng)你往表中插入一行數(shù)據(jù),數(shù)據(jù)庫(kù)系統(tǒng)即向此跟節(jié)點(diǎn)中插入一行索引記錄。當(dāng)根節(jié)點(diǎn)滿時(shí),數(shù)據(jù)庫(kù)系統(tǒng)大抵按照以下步驟進(jìn)行分裂:

1)? ? 創(chuàng)建兩個(gè)兒子節(jié)點(diǎn)

2)? ? 將原根節(jié)點(diǎn)中的數(shù)據(jù)近似地拆成兩半,分別下入新的兩個(gè)兒子節(jié)點(diǎn)

3)? ? 根節(jié)點(diǎn)中加上指向兩個(gè)兒子節(jié)點(diǎn)的指針

通常情況下,由于索引記錄僅包含索引字段值(以及4-9字節(jié)的指針),索引實(shí)體比真實(shí)的數(shù)據(jù)行要小許多,索引頁(yè)相較數(shù)據(jù)頁(yè)來(lái)說(shuō)要密集許多。一個(gè)索引頁(yè)可以存儲(chǔ)數(shù)量更多的索引記錄,這意味著使用索引查找時(shí),磁盤(pán)I/O次數(shù)將會(huì)減少,相應(yīng)的耗時(shí)就會(huì)減少,理解這一點(diǎn)有助于在本質(zhì)上了解使用索引的優(yōu)勢(shì)。

四、查詢數(shù)據(jù)的操作步驟

第一步:

無(wú)論有無(wú)索引,都是先在數(shù)據(jù)緩沖區(qū)查找所需要的數(shù)據(jù),如果數(shù)據(jù)緩沖區(qū)中沒(méi)有需要的數(shù)據(jù)時(shí),服務(wù)器進(jìn)程才去讀磁盤(pán)。

第二步:

l? 無(wú)索引:直接去讀表數(shù)據(jù)存放的磁盤(pán)塊(大量的磁盤(pán)I/O操作,耗時(shí)長(zhǎng)),讀到數(shù)據(jù)緩沖區(qū)中再查找需要的數(shù)據(jù)。

l? 有索引:先讀入索引表,通過(guò)索引表直接找到所需數(shù)據(jù)的物理地址(減少了磁盤(pán)I/O操作次數(shù),節(jié)省時(shí)間),并把數(shù)據(jù)讀入數(shù)據(jù)緩沖區(qū)。

五、索引的類(lèi)型:

1)? ? ? 聚集索引:表數(shù)據(jù)按照索引的順序來(lái)存儲(chǔ)的。對(duì)于聚集索引,葉子節(jié)點(diǎn)即存儲(chǔ)了真實(shí)的數(shù)據(jù)行,不再有另外單獨(dú)的數(shù)據(jù)頁(yè)。

2)? ? ? 非聚集索引:表數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)與索引順序無(wú)關(guān)。對(duì)于非聚集索引,葉節(jié)點(diǎn)包含索引字段值及指向數(shù)據(jù)頁(yè)數(shù)據(jù)行的邏輯指針,該層緊鄰數(shù)據(jù)頁(yè),其行數(shù)據(jù)與數(shù)據(jù)表行數(shù)據(jù)量一致。

在一張表上,只能創(chuàng)建一個(gè)聚集索引,因?yàn)檎鎸?shí)數(shù)據(jù)的物理順序只可能是一種。如果一張表沒(méi)有聚集索引,那么它被稱為“堆記”(heap)。這樣的表中的數(shù)據(jù)行沒(méi)有特定的順序,所有的新行將被添加到表的末尾位置。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容