mysql---查询优化

1.小表驱动大表

mysql---查询优化
mysql---查询优化

2. Order by 关键字优化

  1. order by 子句尽量使用Index方式排序,避免使用FileSort方式排序;

  2. 尽可能在索引列上完成排序操作,遵循索引键的最佳左前缀;

  3. 如果不在索引列上,filesort有两种算法:双路排序和单路排序
    双路排序的字面意思是两次扫描磁盘,最终得到数据,先扫描列表的行列进行排序,在扫描已经排序好的列表;在磁盘去排序字段,在buffer进行排序,再从磁盘取其他字段;
    单路排序 :从磁盘读取需要的所有列,按照order by列在buffer对他们进行排序,然后再扫描排序后的列表进行输出,他的效率更快一点,避免了第二次读取数据,并且把随机IO变成了顺序IO,但是他会使用更多的空间,因为他把每一行都保存在内存中了。
    mysql---查询优化

小结

mysql---查询优化

3. Group by 关键字优化

  1. Group实质是先排序后进行分组,遵照索引建的最佳左前缀;
  2. 当无法使用索引列,增加max_length_for_sort_data参数的设置+ 增大sort_buffer_size参数的设置
  3. where 高于having,能写在where限定的条件 就不要having限定了。