資料庫總結 索引篇

2021-10-19 08:44:04 字數 3160 閱讀 5488

索引是定義在儲存表的基礎上,有助於無需檢查所有記錄而快速定位所需記錄的一種輔助儲存結構,由一系列儲存在磁碟上的索引項組成,每一索引項又由兩部分構成。即索引欄位和行指標。

由表中某些列通常是一列中的值串接而成。索引中通常儲存了索引欄位的每乙個值。

指向表中包含索引字段值的記錄在磁碟上的儲存位置。

儲存索引項檔案的為索引檔案,儲存表稱為主檔案

(相對照的,主檔案組織有堆檔案,排序檔案,雜湊檔案,聚簇檔案等多種方式)

排序索引檔案:按索引字段值的某一種順序組織儲存

雜湊索引檔案:依據索引字段值使用雜湊函式分配雜湊桶的方式儲存

在乙個表上針對不同屬性或者屬性組合建立不同的索引檔案,索引字段值可以是表中任何乙個屬性的值或者屬性值的組合;

索引檔案比主檔案小得多,通過檢索乙個小的索引檔案(可以完全裝載進記憶體),快速定位之後,再有針對性的讀取非常大的主檔案中的相關記錄;

有索引時,更新操作必須同步更新索引檔案和主檔案。保持其資料一致性。

當定義table之後,如果定義了主鍵,系統自動生成主索引;

索引可以由使用者定義或者撤銷;

當索引被建立後,不論是主索引還是使用者定義的索引,dbms都將自動維護所有索引;

當table被刪除之後,定義在該錶上的所有索引自動撤銷。

create index idxsname on student(sname);

drop index idxsname;

對於主檔案中每乙個記錄(形成的每乙個索引字段值),都有乙個索引項和它相對應,指明該記錄所在位置。這樣的索引稱稠密索引。(dense index)

對於主檔案中的部分記錄(形成的索引字段值),有索引項和它對應,這樣的索引稱為非稠密索引或者稀疏索引(sparse index)。

定位索引字段值為k的記錄,需要

稀疏索引的使用要求:主檔案必須是按照對應索引字段屬性排序儲存

相比稠密索引:空間占用更少,維護任務更輕,但速度更慢

平衡:索引項不指向記錄指標,而是指向記錄所在的儲存塊的指標,即每一儲存塊有乙個索引項,而不是每條記錄有一索引項——主索引

1.候選鍵屬性的稠密索引

一一對應即可

2.非候選鍵屬性的稠密索引,主檔案按照索引字段值排序

對每乙個不重複的第乙個索引字段值建立索引項,相同索引字段值則在附近尋找;

3.非候選鍵屬性的稠密索引,主檔案未按照索引字段值排序

不要求索引項中的索引字段唯一,可以重複出現,以實現對主檔案中對應索引字段值的指向;

4.非候選鍵屬性的稠密索引,主檔案未按照索引字段值排序

若要求索引中索引欄位是唯一的,則可以引入乙個中間層,指標桶;該指標桶就是第3種情況。

通常是對每乙個儲存塊有乙個索引項,索引項的總數和儲存表所佔的儲存塊數目相同,儲存表的每一儲存塊的第一條記錄,又稱為錨記錄,簡稱塊錨。

主索引的索引字段值為塊錨的索引字段值,而指標指向其所在的儲存塊。

主索引是按索引字段值進行排序的乙個有序檔案,通常建立在有序主檔案的基於主碼的排序欄位上,即主索引的索引欄位與主檔案的排序碼(主碼)有對應關係。

主索引是稀疏索引。

是定義在主檔案的任一或者多個非排序欄位上的輔助儲存結構;通常是對某一非排序欄位上的不同值有乙個索引項,索引欄位即是該字段的不同值,而指標則指向包含該紀錄的塊或者記錄本身;

當非排序欄位為索引欄位時,如該字段值不唯一,則要採用乙個類似鍊錶的結構來儲存該字段值的所有記錄的位置;

輔助索引是稠密索引,檢索速度有時候相當高

乙個主檔案僅有乙個主索引,但可以有多個輔助索引;

主索引通常建立在主碼或者排序碼上;而輔助索引建立在非排序欄位上;

可以利用主索引重新組織主檔案資料,但輔助索引不能改變主檔案資料;

主索引是稀疏索引,輔助索引是稠密索引。

是指索引中鄰近的記錄在主檔案中也是臨近儲存的;

是指索引中鄰近的記錄在主檔案中不一定是臨近儲存的

注意:

倒排索引是實現「單詞-文件矩陣」的一種具體儲存形式,通過倒排索引,可以根據單詞快速獲取包含這個單詞的文件列表。倒排索引主要由兩個部分組成:「單詞詞典」和「倒排檔案」。

單詞詞典(lexicon):搜尋引擎的通常索引單位是單詞,單詞詞典是由文件集合**現過的所有單詞構成的字串集合,單詞詞典內每條索引項記載單詞本身的一些資訊以及指向「倒排列表」的指標。

倒排列表(postinglist):倒排列表記載了出現過某個單詞的所有文件的文件列表及單詞在該文件**現的位置資訊,每條記錄稱為乙個倒排項(posting)。根據倒排列表,即可獲知哪些文件包含某個單詞。

倒排檔案(inverted file):所有單詞的倒排列表往往順序地儲存在磁碟的某個檔案裡,這個檔案即被稱之為倒排檔案,倒排檔案是儲存倒排索引的物理檔案。

當索引項較多時,可以對索引再建立索引,稱為多級索引。

常見的多級索引:b樹/b+樹索引

索引欄位由表的多個屬性值組合在一起形成的索引

使用雜湊技術組織的索引

使用多索引字段進行交叉聯合定位與檢索

一種以樹形資料結構來組織索引項的多級索引

由於乙個儲存塊是可以儲存多個索引項,每個索引項又由指標和索引欄位兩部分構成。用ki表示索引字段值,pi表示指標,指向索引塊或者資料塊或者資料塊中記錄。

一塊中通常可以儲存n-1個索引項和1個指標。

索引字段值x在ki-1<=x非葉結點指標指向索引塊,葉結點指標指向主檔案的資料塊或資料記錄

葉結點的最後乙個指標指向下乙個資料塊

乙個索引塊實際使用的索引指標個數d,滿足(根結點除外)

n/2<=d<=n

根結點至少2個指標被使用

索引字段值重複出現於葉結點和非葉結點

指向主檔案的指標僅出現於葉結點

所有葉結點即可覆蓋所有鍵值的索引

索引字段值在葉結點中是按順序排列的

僅葉結點的集合就是主檔案完整的索引

資料庫索引白話篇

索引 這個名字,想必大家都耳熟能詳了,眾所周知,索引最大的用途就是提公升資料庫的查詢速度。或許,你會說,我曾經自己動手按書上講的方法試驗了一番,可是沒有感覺有多大速度的提公升呢?這完全是可能的,因為索引就像是一門非常厲害的武功招式,如果我們想發揮其最大的功力,光憑招式的純熟是遠遠不夠的,我們還必須同...

資料庫篇 4 索引

索引的優勢 提高查詢效率 降低io的使用率 降低cpu使用率 因為b樹索引本身就是乙個排好序的結構,因此在排序時可以直接使用 索引的缺點 索引本身很大,可以存放在記憶體 硬碟 通常為硬碟 索引不是所有情況均適用 比如 資料量少 頻繁更新的字段 很少使用的字段等情況 所有索引會降低增刪改的效率 主鍵索...

資料庫索引白話篇

索引 這個名字,想必大家都耳熟能詳了,眾所周知,索引最大的用途就是提公升資料庫的查詢速度。或許,你會說,我曾經自己動手按書上講的方法試驗了一番,可是沒有感覺有多大速度的提公升呢?這完全是可能的,因為索引就像是一門非常厲害的武功招式,如果我們想發揮其最大的功力,光憑招式的純熟是遠遠不夠的,我們還必須同...