1、索引的結構
mysql索引的數據結構,對經典的B+Tree進行了優化,在原B+Tree上增加了一個指向相鄰葉子結點的鏈表指針,就形成了一個帶有順序指針的B+Tree,提高了區間訪問的性能。
選擇B+Tree的優點:
a、相對於二叉樹,層級更少,搜索效率更高
b、相對於B-Tree,B+Tree只在葉子節點上存儲數據,而B-Tree在非葉子節點上也存了數據,這樣存儲的鍵減少,層級更高。
c、hash索引不支持排序和範圍操作。
2、索引的分類
聚集索引:又叫主鍵索引,葉子節點保存這一行的數據
非聚集索引:又叫常規索引、二級索引,葉子節點保存這一行的主鍵
3、性能分析工具---explain
a、使用方式:在select語句前加上explain
b、執行計劃各字段的含義:
id: 表的執行順序,值相同執行順序從上到下,值越大越先執行。
select_type:表示select的類型,simple表示單表查詢;primary表示主查詢也就是最外層的查詢;union表示join的表;SUBQUERY子查詢
type: 連接類型,性能由好到差的連接類型:NULL、system、const、eq_ref、ref、range、index、all
NULL不訪問任何表
system訪問系統表
const使用主鍵索引
eq_ref唯一索引
ref非唯一索引
range
index雖然用了索引,但全遍歷所有的索引
all全表掃描
possible_keys:可能用到的索引
key:實際用到的索引
key_len:索引字段的長度
rows:掃描的行數,只是一個估值,並不太準確
filtered:返回的行數佔總行數的百分比,值越大越好
extra:額外的信息
4、使用規則
最左前綴法則:主要是針對聯合索引的順序
索引失效的原因:
a、在索引字段上計算;
b、字符串不加單引號;
c、頭部模糊匹配;
d、or條件前如有索引,後面條件沒有索引,則前面索引失效;
e、mysql評估掃描全表比使用索引快,則不會走索引
5、設計原則