mysql覆蓋索引入門介紹

2021-10-08 15:25:53 字數 704 閱讀 2583

要深刻理解覆蓋索引,要弄清楚innodb引擎b+tree結構,具體結構如下:

那麼這兩個結構的區別在**呢,區別就在葉子節點中,主鍵索引儲存的是整行的資料,而非主鍵索引葉子節點儲存的是主鍵id,可以看下面的sql:

select age from student where name =

'小王';

執行上面的sql流程為:

在name索引樹上找到名稱為小李的節點 id為03

從id索引樹上找到id為03的節點 獲取所有資料

從資料中獲取欄位命為age的值返回 12

上面的操作成為回表:

在流程中從非主鍵索引樹搜尋回到主鍵索引樹搜尋的過程稱為:回表。可以通過覆蓋索引解決。

覆蓋索引(索引覆蓋):

即從非主鍵索引中就能查到的記錄,而不需要查詢主鍵索引中的記錄,避免了回表的產生減少了樹的搜尋次數,顯著提公升效能。

使用覆蓋索引:

把select查詢的值新增上聯合索引就ok了,這樣非主鍵索引的葉子節點中的資料就會滿足查詢條件,而不需要通過主鍵索引再去回表查詢一遍。

如何判斷是否使用的覆蓋索引:

在explain的extra列可以看到using index的資訊,就說明使用到了覆蓋索引。

MySQL索引入門

索引就相當於表的目錄一樣,可以提高我們查詢資料的效率,是一種資料結構。常見的mysql主要有兩種結構 hash索引和b 樹索引。使用哪種資料結構跟儲存引擎有關,innodb引擎預設使用的是b 樹。補充 b 樹索引和雜湊索引的區別?什麼場景不適合使用索引 2 對於那些只有很少資料值的列不適合建立索引 ...

MySQL索引入門

索引於mysql資料庫,就像是目錄於書籍,讀者可以通過目錄可以快速定位到自己想要的內容。同時,索引基本是對mysql進行查詢效能優化最有效的手段。因為mysql的索引是在引擎層而不是伺服器層實現的,所以不同儲存引擎的索引的種類和工作方式是不同的,即便看起來相同,底層實現邏輯也可能大相徑庭。b tre...

mysql索引入門簡介

舉個例子 若將資料庫比作一本書,那麼索引就是書的目錄,用來提高查詢的速度。通過索引,查詢資料時可以不必讀完記錄的所有資訊,而只是查詢索引列。表的不同的儲存引擎定義了每個表的最大索引數和最大索引長度。所有儲存引擎對每個表至少支援16個索引,總索引長度至少為256b,有些儲存引擎支援更多的索引數和更大的...