mysql优化手记

116 阅读2分钟

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.
    
    

2.索引

   要点:
        1.覆盖索引 查询条件使用的是普通索引  查询结果是联合索引的字段或主键 不用回表操作 直接返回结果
        2.联合索引最左侧命中规则且不宜过多
        3.mysql5.6引入索引下推优化 可以在索引遍历过程中对索引中包含的字段先做判断 直接过滤掉不满足条件的记录减少回表
        4.字段长度过长不宜做索引
        5.字符集不同可能走不上索引
        
        
        

3.字段

    要点:1.条件字段不宜进行函数操作会破坏索引值得有序性而用不上索引
          2.
          

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