• 查询截取分析


    查询截取分析
    1. 分析步骤

      1. 观察,至少跑一天,看看生产的慢sql情况

      2. 开启慢查询日志,设置阈值,比如超过5秒钟的就是慢sql,并将它抓取出来

      3. explain + 慢sql分析

      4. show profile

      5. 以上4步完还不行,就需要运维经理或者DBA进行参数调优

    2. 总结

      1. 慢查询的开启并捕获

      2. explain + 慢sql分析

      3. show profile查询SQL在Mysql服务器里面执行细节和生命周期情况

      4. SQl数据库服务的参数调优

    3. 查询优化

      1. 永远小表驱动大表类似嵌套循环Nested Loop,即小的数据集驱动大的数据集

      2. order by 优化

        1. order by子句,尽量使用index方式排序,避免使用FileSort方式排序,尽可能在索引列上完成排序操作,遵循索引建立的最佳左前缀

          1. Mysql支持两种方式的排序,filesort和index,Index效率高,它指Mysql扫描所以本身完成排除。Filesort效率较低

          2. order by 满足两种情况会使用Index方式排序

            1. order by语句使用索引最左前列

            2. 使用where子句与order by子句条件列组合满足索引最左前列

        2. 如果不在索引列上,filesort有以下两种算法

          1. 双路排序:Mysql4.1之前是使用双路排序,字面意思就是两次扫描磁盘,最终得到数据,读取行指针和order by 列,对他们进行排序,然后扫描已经排好序的列表,按照列表中的值重新从列表中读取对应的数据输出

          2. 单路排序:从磁盘读取查询需要的所有列,按照order by列在buffer对他们进行排序,然后扫描排序后的列表进行输出,它的效率更快一些,避免第二次读取数据。并且把随机IO变成了顺序IO,但是他会使用更多的空间,因为它的每一行都保存在内存中了

          3. 单路排序可能会出现的问题:在sort_buffer中,方法B比方法A要多占用很多空间,因为方法B是把所有字段都取出,所以有可能取出的数据的总大小超出了sort_buffer的容量,导致每次只能读取sort_buffer容量大小的数据,进行排序(创建tmp文件,进行多路合并),排完再取sort_buffer容量大小,再排....从而多次IO.本想一次IO结果造成多次IO

        3. 优化策略

          1. 增加sort_buffer_size的参数设置

          2. 增加max_length_for_sort_data参数的设置

        4. 总结

      3. group by优化

  • 相关阅读:
    SVM学习笔记-线性支撑向量机
    阿里面试回来,想和Java程序员谈一谈
    看外国女程序员如何直播写代码
    shoeBox超实用的雪碧图(Sprite)图制作工具-使用
    Android图像处理之图形特效处理
    SMP、NUMA、MPP体系结构介绍
    TIOBE 2017 8月编程语言排行榜 后院“硝烟四起”
    Android Studio中Git和GitHub使用详解
    矩阵乘法快速幂 codevs 1574 广义斐波那契数列
    矩阵乘法 codevs 1287 矩阵乘法
  • 原文地址:https://www.cnblogs.com/juddy/p/16376815.html
Copyright © 2020-2023  润新知