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