MySQL索引詳解

MySQL索引詳解

一. 索引的作用

索引的作用:提高數據查詢的效率。如果沒有索引,每次查詢數據都需要掃描全表。

二. 索引的常見模型

  1. 哈希表:以key-value的形式保存數據。
    1. 優點:查詢速度很快 O(1)
    2. 缺點:只適用於等值查詢的場景,無法進行模糊查詢和範圍查詢。
  2. 有序數組
    1. 優點:採用二分查找,等值查詢和範圍查詢的效率都比較高O(logn)
    2. 缺點:插入或者更新數據時,需要移動元素,效率很低。因此僅適用於靜態存儲引擎(數據幾乎不會改變)
  3. B+樹

三. InnoDB的索引模型

  1. 每個索引在InnoDB裏面都對應一顆B+樹
  2. 主鍵索引的葉子節點存放的是整行數據。主鍵索引也被成爲聚簇索引。
  3. 非主鍵索引的葉子節點存放的是主鍵的值。非主鍵索引也被成爲二級索引。
  4. 基於主鍵查詢時,只需要搜索主鍵所在的索引B+樹即可。
  5. 基於非主鍵查詢時,需要首先搜索非主鍵索引樹,再搜索主鍵索引樹。這個過程稱爲回表。因此,查詢時儘量使用主鍵索引,可以減少一次查詢。

四. 爲什麼推薦使用自增主鍵

  1. 基於自增主鍵,每次插入主鍵時都是在B+樹種遞增插入——每次插入一條數據,都是追加操作,不涉及到移動其他記錄,也不會觸發葉子節點的分裂
  2. 使用自增主鍵,一般爲int(4字節)或bigint(8字節),所佔空間較小。
  3. 如果沒有顯示自增主鍵,InnoDB會選擇一個int型或bigint型的unique_key作爲主鍵。如果找不到unique_key,則會爲該表自動生成一個自增主鍵。

五. 覆蓋索引

  1. 查詢時,儘量讓索引字段覆蓋查詢需求,稱爲覆蓋索引。
  2. 由於覆蓋索引可以減少樹的搜索次數,顯著提升查詢性能,所以使用覆蓋索引是一個常用的性能優化手段。

六. 最左前綴原則

  1. 最左前綴:可以是聯合索引的最左 N 個字段,也可以是字符串的最左M個字符

七. 索引下推

MySQL 5.6引入了索引下推優化,可以在索引遍歷過程中,對索引中包含的字段先做判斷,直接過濾掉不滿足條件的記錄,減少回表次數。

八. 重建索引

索引可能因爲刪除,或者頁分裂等原因,導致數據頁有空洞,重建索引的過程會創建一個新的索引,把數據按順序插入,這樣頁面的利用率最高,也就是索引更緊湊、更省空間。

但是刪除主鍵或者創建主鍵的操作,會將整個表重建,要慎重。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章