天天看點

MySQL-索引-覆寫索引

覆寫索引

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.總結

對于

覆寫索引

,通過聯合索引可能實作覆寫索引,但是該情況隻限于對于所需的查詢列比較少的情況,所需的查詢列比較多的情況,不可能全部實作

聯合索引

,是以不能實作覆寫索引。

繼續閱讀