假設(shè)建立這樣一個(gè)聯(lián)合索引
KEY
idx(name, age, postion) USING BTREE
- 索引的本質(zhì)是幫助
MYSQL
高效獲取數(shù)據(jù)的排好序的數(shù)據(jù)結(jié)構(gòu)(一般都是B樹)從左到右依次遞增匀泊,非int
類型字典排序任连。
底層存放示例
他是按照索引的字段,第一個(gè)字段排序池摧,相等的話片效,則看第二個(gè)字段比較大小红伦。所以如果查詢條件跳過第一個(gè)字段,直接查詢第二淀衣、第三昙读,或者是第三字段的話,那么這個(gè)是無序的膨桥,自然用不了索引蛮浑。
-- 如果聯(lián)合索引是 INDEX `idx`(`realname`, `mobile`, `phone`) USING BTREE (注意和上面的案例圖片不是一個(gè)表,但是索引結(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 的索引最左原則就很清晰了只嚣。索引多個(gè)字段沮稚,會(huì)按照字段順序依次比較大小建立索引,如果跳過這個(gè)順序的話介牙,則索引失效壮虫。前提是沒有其他索引進(jìn)行影響