假設(shè)建立這樣一個聯(lián)合索引
KEYidx(name, age, postion) USING BTREE
- 索引的本質(zhì)是幫助
MYSQL高效獲取數(shù)據(jù)的排好序的數(shù)據(jù)結(jié)構(gòu)(一般都是B樹)從左到右依次遞增,非int類型字典排序。
底層存放示例
他是按照索引的字段,第一個字段排序,相等的話,則看第二個字段比較大小。所以如果查詢條件跳過第一個字段,直接查詢第二、第三,或者是第三字段的話,那么這個是無序的,自然用不了索引。
-- 如果聯(lián)合索引是 INDEX `idx`(`realname`, `mobile`, `phone`) USING BTREE (注意和上面的案例圖片不是一個表,但是索引結(jié)構(gòu)相同)
EXPLAIN SELECT * FROM zt_user WHERE realname = 'lin' AND mobile = '1732100' AND phone = '123@qq.com';
EXPLAIN SELECT * FROM zt_user WHERE mobile = '1732100' AND phone = '123@qq.com';
EXPLAIN SELECT * FROM zt_user WHERE phone = '123@qq.com';
則explain后的執(zhí)行情況是:

結(jié)果一

結(jié)果二

結(jié)果三
mysql 的索引最左原則就很清晰了。索引多個字段,會按照字段順序依次比較大小建立索引,如果跳過這個順序的話,則索引失效。前提是沒有其他索引進(jìn)行影響
