### 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. 增加子查询对索引列进行优化