### 1.預sqlExplain :
作用:了解當前sql語句的執行情況
參數:
type(對表的訪問方式): system const eq_ref ref range index all
key:實際應用到的索引
possible_key: 可能出現的索引
key_len : 索引長度
extra: 執行情況說明
rows: 查詢行數 概數 是采樣統計 mysql的基本單位是頁
注意:
1.排除緩存 sql nocache mysql執行一次查詢操作后會生成緩存 當第二次執行的時候
會優先找緩存 如果緩存命中的話 就直接返回結果如果沒有命中則會按流程走
解析器->優化器->執行器->引擎
### 2.索引
要點:
1.覆蓋索引 查詢條件使用的是普通索引 查詢結果是聯合索引的字段或主鍵 不用回表操作 直接返回結果
2.聯合索引最左側命中規則且不宜過多
3.mysql5.6引入索引下推優化 可以在索引遍歷過程中對索引中包含的字段先做判斷 直接過濾掉不滿足條件的記錄減少回表
4.字段長度過長不宜做索引
5.字符集不同可能走不上索引
### 3.字段
要點:1.條件字段不宜進行函數操作會破壞索引值得有序性而用不上索引
### 4.sql設計:
要點:
1.避免i/o開銷過大 也就是全表掃描
2.避免低效的子查詢
3.like盡量少用左右通配
4.查詢多用索引列查取
5.禁忌循環執行sql
### 5. mysql using filesort 調優
1. filesort排序方式:
1.對需要排序的記錄生成<sort_key,rowid>的元數據進行排序,排序完成后只有按字段排序的rowid,
因此還需要通過rowid進行回表操作獲取所需要的字段的值,可能會導致大量的io開銷。
2.對需要排序的記錄生成<sort_key,additional_fields>的元數據,元數據包含排序字段和需要返回的列。
排序完后不需要回表操作,但是元數據比第一種要長的多,空間占用率過高。
2. 原因:
order by 字段沒有加索引,便會出現filesort。但是查詢字段沒有加索引也會走filesort ,可以加上子查詢進行優化。
3. 調優方法:
1. 修改配置: sort_buffer_size
2. 增加子查詢對索引列進行優化