MySQL高級篇之單表索引優化實戰

單表優化

本篇主要講解Mysql索引的單表優化實戰
建立表student
例子:查詢年齡大於18的大學生並將結果按照id排序
在這裏插入圖片描述

  • 1,查詢SQL

select * from students where age>18 and type=‘大學生’ order by id

  • 2,分析這條SQL
    Explain
    select * from students where age>18 and type=‘大學生’ order by id
    在這裏插入圖片描述
    索引類型爲all,屬於最不理想的結果(system>const>eq_ref>ref>range>index>all索引類型性能由高到低的排序)
    key:因爲我們還沒有建立索引,所以這裏沒有使用到索引
    rows:執行該sql預計會查詢7行
    Extra:using filesort 使用了文件排序 ,同樣很不理想

  • 3,給這幾個字段加上索引

3.1 給這三個字段加上索引
create index ind1_age_type_id on students(age,type,id);
在這裏插入圖片描述

3.2再次分析這條sql

Explain
select * from students where age>18 and type=‘大學生’ order by id在這裏插入圖片描述
對比未建立索引的優缺點:
優點:type由之前的all變爲了range,rows由之前的7行變成了現在的4行
不足:extra中仍然存在using filesort這個文件排序
原因:這是因爲當索引類型爲range範圍索引時,其右邊的索引會失效,所以剛纔的sql其實只有age這個索引成功了,type和id索引失效了。

3.3 重新考慮建立索引

刪除之前的索引:
drop index ind1_age_type_id on students
結合上面範圍索引的原則,我們重新建立索引
alter table students add index ind_type_id_age(type,id,age)
在這裏插入圖片描述
3.4重新分析這條sql

Explain
select * from students where age>18 and type=‘大學生’ order by id
在這裏插入圖片描述
可以看到相比上個索引優缺點:
優點:type由range變成了ref,extra中文件排序消失了
缺點:索引的長度增加了,這也是因爲使用了三個索引值,才導致索引鍵長度增加了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章