覆寫索引
1.什麼是覆寫索引?
概念:查詢語句中所需要的列在索引中,這樣查詢結果在索引的資料結構中查找即可拿到結果。
附加網友解釋:
- 解釋一: 就是select的資料列從索引中就能夠擷取,不必從資料表中再次讀取,換句話說,就是查詢列可以索引福噶
- 解釋二:索引是高效找到行的一個方法,當能通過檢索索引就可以讀取想要的資料,那就不需要再到資料表中讀取行了。如果一個索引包含了(或覆寫了)滿足查詢語句中字段與條件的資料就叫做覆寫索引。
- 解釋三:是非聚集組合索引的一種形式,它包括在查詢裡的select,join和where子句用到的所有列(即建立索引的字段正好是覆寫查詢語句[select子句]與查詢條件[where子句]中所涉及的字段,也即,索引包含了查詢正在查找的所有資料)。
2.形成覆寫索引的條件
索引分為多種類型,從資料結構上分為 二叉樹、紅黑樹、 Hash索引、B-Tree索引,B+Tree(MySQL使用的存儲結構)
索引的實作可以使用多種資料結構,這裡使用B-Tree和B+Tree的索引能實作覆寫索引。
3.如何檢視是否使用了覆寫索引?
使用指令,通過檢視
explain
列可以看到
Extra
的資訊,證明使用了覆寫索引
Using index
4.如何使用覆寫索引優化SQL
先扯出來一個概念
回表:先索引掃描,再通過ID去查表資料,取索引中未能提供的資料,即為回表。
簡單來說就是資料庫根據索引找到了指定的記錄所在行後,還需要根據rowid再次到資料塊裡取資料的操作
如何避免回表?
條件允許的情況下,使用聯合索引
- 使用
指令,explain
列出現Extra
表示使用的索引方式為二級檢索,資料将會被回表查詢,會出現一定的性能消耗。Using index condition
- 分頁查詢時,通過
,能夠實作組合索引
.覆寫索引
5.總結
對于
覆寫索引
,通過聯合索引可能實作覆寫索引,但是該情況隻限于對于所需的查詢列比較少的情況,所需的查詢列比較多的情況,不可能全部實作
聯合索引
,是以不能實作覆寫索引。