1. 程式人生 > >聯合索引使用規則

聯合索引使用規則

再接著看B這條sql語句

我們看到key=c1234,表示B使用了聯合索引,key_len=2表示有兩個欄位使用了索引,這兩個欄位就是C1和c2,這個sql裡面有一個order by c3,order by不能使用索引,但是卻利用了索引,為什麼這麼說咧,先看C這條sql
 
key=c1234,表示B使用了聯合索引,key_len=1表示有1個欄位使用了索引,這個欄位就是C1,與B語句不一樣的是 Extra的值
C語句裡面使用了臨時表(Using temporary) 和 排序(filesort),
因為組合索引是需要按順序執行的,比如c1234組合索引,要想在c2上使用索引,必須先在c1上使用索引,要想在c3上使用索引,必須先在c2上使用索引,依此。。
回到B語句中,因為c2欄位已經使用了索引,所以在order by c3的時候 c3其實在索引表裡面已經是排好序的了,不需要建臨時表,不需要再排序,所以說其實他利用上了索引
而C語句中,group by 的順序是先c3,再c2,在對c3進行group by的時候,c2欄位上的索引並沒用使用,所以索引在這裡就斷了,只用上了c1一個欄位的索引