mysql 中的索引有多種,一般需要優化sql的話也一般是添加或優化聯合索引來達到優化的效果。
首先聯合索引是什麼?
聯合索引就是由多個字段列聯合組成的一列索引列
添加聯合索引的文法和單列索引是一樣的。
添加索引
ALTER TABLE TABLE_NAME ADD INDEX idx_name_sex_age(name,sex,age);
建了一個聯合索引相當于見了三個索引
(name),(name,sex),(name,sex,age)

情況1 的搜尋條件正好在處于idx_name_sex_age 索引上 索引他的key為idx_name_sex_age
EXTRA 為USING INDEX 代表覆寫索引
想搞清楚一個概念,什麼叫做覆寫索引。覆寫索引和回表查詢是怎麼一回事
一般查詢的時候,查詢的時候的條件和要查詢的字段 如果在一個索引上的話可以直接拿索引上的值來
例如我們現在有個單列索引。index_col1
那麼我們要查詢col1,col2的值 使用col1來做where 條件的話 搜尋的時候col1的值是索引列 那麼col1的值是可以直接搜尋的到。但是col2的值并不在索引上,那麼就需要根據col1查詢出的主鍵去表中 查詢出col2的值 這樣的話雖然走了索引,但是需要再次回表查詢無疑速度會慢一些。、
聯合索引即可解決這個問題,我們可以建一個包含col1,col2的聯合索引 這樣的話 我們搜尋 col1,col2的值的時候可以直接從索引列上取到值不需要去表中查詢
上圖中的情況1 就是因為是覆寫索引是以 EXTRA 顯示為USING INDEX 一般來說這個sql的性能就到了最高了。
索引的使用和where條件中的列的順序無關