• SQL查询比较慢,如何进行排查?如何进行SQL优化?


    目录

    一、开启慢查询日志

    二、SQL优化

     三、总结


    一、开启慢查询日志

    SQL慢查询是指执行时间较长的SQL语句,可能导致系统性能下降和响应时间延长。通过以下步骤可以开启慢查询日志记录:

    #查询是否开启慢查询日志 slow_query_log显示ON说明已开启,显示OFF说明未开启

    show variables like '%slow_query_log%';

    #开启慢查询日志

    set global slow_query_log = 1;

    # 确认慢查询日志是否已开启 slow_query_log的值应该为ON,表示慢查询日志已经成功开启。

    show variables like '%slow_query_log%';

    #默认情况下,MySQL会将执行时间超过10秒的查询认定为慢查询

    # 设置全局的超过5秒就记录到日志文件中 如果等于0可以记录所有的SQL语句

    set global long_query_time = 5;

    # 慢查询日志的记录位置命令

    show variables like '%slow_query_log_file%';

    二、SQL优化

    SQL优化是通过改进SQL语句数据库结构设计来提高查询性能和效率的过程。如果SQL执行查询操作比较慢有以下四个原因

    一)没有索引或者SQL没有命中索引导致索引失效(explain分析SQL计划)

            可以利用explian关键字分析SQL执行计划,查看SQL有没有命中索引。如果发现慢查询的SQL没有命中索引,可以尝试优化这些SQL语句,保证SQL走索引执行。我们在优化SQL或者是添加索引的时候,都需要符合最左匹配原则。

    二)单表数据量过多,导致查询瓶颈(水平、垂直切分

    可以对表进行切分,水平切分或垂直切分。

    水平切分:是把一张数据行数达到千万级别的大表,按照业务主键切分为多张小表,这些小表可能达到100张甚至1000张。

     垂直切分:将一张单表中的多个列,按照业务逻辑把关联性比较大的列放到同一张表中。

     三)网络原因或者机器负载过高(读写分离

    通过搭建MySQ读写分离,主库写、从库读。MySQL支持一主多从的分布式部署,我们可以将主库只用来处理写数据的操作,而多个从库只用来处理读操作。在流量比较大的场景中,可以增加从库来提高数据库的负载能力,从而提升数据库的总体性能。

     四)热点数据导致单点负载不均衡(热点数据加缓存

    这种情况下,除了对数据库本身的调整以外,还可以增加缓存。将查询比较频繁的热点数据预存到缓存当中,比如Redis、MongoDB、ES等,以此来缓解数据的压力,从而提高数据库的响应速度。

     三、总结

    SQL查询比较慢可以通过开启慢查询日志进行分析,定位到问题之后可以通过explain关键字进行SQL计划执行分析、水平/垂直分表、搭建主从集群、热点数据加入redis缓存等方式对SQL进行优化。

  • 相关阅读:
    linux使用stress命令进行压力测试cpu
    基于Springboot的SSM整合案例(详解)
    useRef 无法挂载子组件信息,.curret为null
    30-33、SpringBoot项目部署\属性配置方式\多环境开发(一个文件)\多环境分组(多个文件)
    【Linux】Linux中的基本概念
    设计模式(一)-设计原则(1)
    解决方案:读取两个文件夹里不同名的文件,处理映射不对应的文件
    【Qt 开发基础体系】字符串类应用和常用的数据类型
    Spring Boot集成JasperReport生成文档
    docker搭建kafka
  • 原文地址:https://blog.csdn.net/weixin_71921932/article/details/130852332