資料庫 索引模型初探

2021-10-12 04:58:35 字數 1486 閱讀 8573

目的: 索引的出現其實就是為了提高資料查詢的效率,就像書的目錄一樣。

雜湊表、有序陣列和搜尋樹(二叉/多叉)

雜湊表:

有序陣列:

搜尋樹(二叉/多叉):

在 innodb 中,表都是根據主鍵順序以索引的形式存放的,這種儲存方式的表稱為索引組織表。innodb 使用了 b+ 樹索引模型,所以資料都是儲存在 b+ 樹中的。

每乙個索引在 innodb 裡面對應一棵 b+ 樹。

示例:假設,我們有乙個主鍵列為 id 的表,表中有字段 k,並且在 k 上有索引。

mysql>

create

table t(

id int

primary

key,

k int

notnull

, name varchar(16

),index

(k))

engine

=innodb

;

表中 r1~r5 的 (id,k) 值分別為 (100,1)、(200,2)、(300,3)、(500,5) 和 (600,6),兩棵樹的示例示意圖如下。

從圖中不難看出,根據葉子節點的內容,索引型別分為主鍵索引和非主鍵索引

主鍵索引的葉子節點存的是整行資料。在 innodb 裡,主鍵索引也被稱為聚簇索引(clustered index)。

非主鍵索引的葉子節點內容是主鍵的值。在 innodb 裡,非主鍵索引也被稱為二級索引(secondary index)。

基於主鍵索引和普通索引的查詢有什麼區別?

也就是說,基於非主鍵索引的查詢需要多掃瞄一棵索引樹。因此,我們在應用中應該盡量使用主鍵查詢。

為什麼一般情況下建議建立乙個自增主鍵

主鍵長度越小,普通索引的葉子節點就越小,普通索引占用的空間也就越小。但事無絕對,也有適用於業務邏輯字段做主鍵的場景。

如果執行的語句是 select id from t where k between 3 and 5,這時只需要查 id 的值,而 id 的值已經在 k 索引樹上了,因此可以直接提供查詢結果,不需要回表。也就是說,在這個查詢裡面,索引 k 已經「覆蓋了」我們的查詢需求,我們稱為覆蓋索引

由於覆蓋索引可以減少樹的搜尋次數,顯著提公升查詢效能,所以使用覆蓋索引是乙個常用的效能優化手段。

初探資料庫索引

索引是定義在儲存表 table 基礎上,有助於無需檢查所有記錄而快速定位所需記錄的一種輔助儲存結構。索引是由一系列儲存在磁碟上的索引項組成的。索引一般由下面兩個字段組成 儲存索引的檔案為索引檔案,儲存表的檔案稱為主檔案 索引檔案的組織方式可以理解為儲存方式。一般分為兩種 索引欄位的組成前面已經提到,...

OLAP資料庫初探

olap的標準概念叫作 聯機分析處理系統 與之對應的是oltp 聯機事務處理系統 oltp對於事務性的要求非常高,常用於銀行 等系統,但執行速度相對有限。有感於此,關聯式資料庫之父codd便在1993年提出了olap的概念,認為使用者的很多決策需要依賴大量的計算與多維的分析才能解決,並作為一類單獨的...

資料庫 資料庫索引

索引是儲存引擎用於快速找到記錄的一種資料結構。索引以檔案的形式儲存在磁碟中。索引可以包含乙個或多個列的值。儲存引擎查詢資料的時候,先在索引中找對應值,然後根據匹配的索引記錄找到對應的資料行。1.b tree索引 2.雜湊索引 myisam和innodb儲存引擎 只支援btree索引,也就是說預設使用...