1. 程式人生 > 其它 >Mysql名詞解析-主鍵索引/回表/索引覆蓋/索引下推/MVCC

Mysql名詞解析-主鍵索引/回表/索引覆蓋/索引下推/MVCC

主鍵索引和非主鍵索引

主鍵索引的葉子節點存的是整行資料。在 InnoDB 裡,主鍵索引也被稱為聚簇索引
非主鍵索引的葉子節點內容是主鍵的值。在 InnoDB 裡,非主鍵索引也被稱為二級索引

回表

普通索引查詢方式,則需要先搜尋其索引樹,得到主鍵索引的值為,再到主鍵索引樹搜尋一次。這個過程稱為回表。

索引覆蓋

只需要在一棵索引樹上就能獲取SQL所需的所有列資料,無需回表,速度更快。
(即explain的輸出結果Extra欄位為Using index時,能夠觸發索引覆蓋)

索引下推 (Index Condition Pushdown),簡稱ICP

索引下推的下推其實就是指將部分上層(服務層)負責的事情,交給了下層(引擎層)去處理。

使用ICP,當存在索引的列做為判斷條件時,儲存引擎通過判斷索引是否符合MySQL伺服器傳遞的條件,只有當索引符合條件時才會將資料檢索出來返回給MySQL伺服器。

不使用ICP,通過使用非主鍵索引進行查詢,儲存引擎通過索引檢索資料,然後返回給MySQL伺服器,伺服器再判斷是否符合條件。

MVCC

MySQL InnoDB儲存引擎,實現的是基於多版本的併發控制協議——MVCC (Multi-Version Concurrency Control) 。

MVCC最大的好處:讀不加鎖,讀寫不衝突。

LBCC:Lock-Based Concurrency Control,基於鎖的併發控制。基於鎖的併發機制併發量低,MVCC是在基於鎖的併發控制上的改進。

在MVCC併發控制中,讀操作可以分成兩類:

  1. 快照讀:讀取的是記錄的可見版本 (有可能是歷史版本),不用加鎖(共享讀鎖s鎖也不加,所以不會阻塞其他事務的寫)
  2. 當前讀 :讀取的是記錄的最新版本,當前讀返回的記錄,都會加上鎖,保證其他事務不會再併發修改這條記錄