mysql的索引就像是一本書的目錄,就是為了提高資料的查詢效率。
innodb的索引樹為B+樹,每個索引對應一顆B+樹,索引是按照有序排列的,所以每次查詢不用掃描整個索引樹。
而索引又分為主鍵索引和普通索引,普通索引和主鍵索引的區別是:普通索引要比主鍵索引多一次回表。下面通過一個例子講一下。
例如有以下的sql:
- 如果語句是 SELECT * FROM user WHERE ID=600 ,這句sql會直接搜尋ID這個索引的B+樹,即主鍵查詢方式。
- 如果語句是SELECT * FROM user WHERE k=5,k是普通索引,則會走一遍普通索引樹,得到id的值是600,再去主鍵索引樹搜尋一次。
也就是說,在應用中儘量使用主鍵索引。主鍵索引也稱為覆蓋索引。
B+樹的索引規則是將資料按照索引欄位裡定義的順序進行排列的,也就是說是有序的,只需要找到最左邊的相似的資料,然後向後遍歷就能得到。這就是“最左字首”。
例如下面這圖
當你的邏輯是查到所有名字是“張三”的人時,可以快速定位到ID4,然後往後遍歷下去。
另外,5.6以後的mysql還支援了索引下推,這樣就不用再回表判斷資料正不正確,直接在普通索引遍歷中對包含的索引欄位進行判斷,直接過濾掉不滿足的條件。
本作品採用《CC 協議》,轉載必須註明作者和本文連結