zoukankan      html  css  js  c++  java
  • Mysql之order by|group by 排序优化

    order By 关键字优化
    1.尽量使用index方式排序,避免使用Filesort方式排序。
    2.Mysql支持两种排序方式,Filesort和Index,Index效率高,
    它指Mysql扫描索引本身完成排序。FileSort排序方式效率低。
    order by满足两种情况,会使用index排序
    1.order by 语句使用索引最左前列
    2.使用where子句和order By子句条件满足索引最左前列。
    如果不在索引列上,filesort有两种算法:
    Mysql就要启动双路排序和单路排序
    Mysql4.1之前使用双路排序,字面意思就是两次扫描磁盘,最终得到数据,读取行指针和orderby列,对他们进行排序。然后扫描已经排好序的列表,按照列表中的值重新从列表中读取对应的数据。
    单路排序:从磁盘读取要查询的列,按照order by列在buffer对他们进行排序,然后扫描排序后的列表进行输出,它的效率更快一些,避免了第二次读取数据。并且把随机IO变成了顺序IO,但是他会使用更多的空间,因为他把每一行都保存在内存中了。
    单路查询问题:在sort_buffer中,在使用单路查询时,因为要把所有字段都取出,所以有可能取出的数据的总大小超出了sort_buffer的容量,导致每次只能去sort_buffer容量大小的数据,进行排序,排完在取出sort_buffer容量大小,造成多次I/O。
    优化策略:
    增大sort_buffer_size参数的设置
    增大max_length_forsort_data参数的设置

    group by 实质是先排序后进行分组,遵照索引建的最佳左前缀。
    当无法使用索引列增大sort_buffer_size参数的设置和max_length_forsort_data参数的设置
    Where高于having,能写在where限定的条件就不要去having限定了。
  • 相关阅读:
    云原生学习笔记(4)——Pod和容器设计模式
    云原生学习笔记(3)——Kubernetes基本概念
    云原生学习笔记(2)——容器基本概念
    云原生学习笔记(1)——云原生
    JAVA基础系列:JDK目录结构
    Mac 接手步骤
    JAVA基础系列:运行环境
    软件测试系列——Web界面检查点和测试原则
    软件测试系列——白盒测试
    软件测试系列——性能指标
  • 原文地址:https://www.cnblogs.com/cbxBlog/p/9193042.html
Copyright © 2011-2022 走看看