• MySQL SQL性能分析(SQL优化 一)


    在开发和维护数据库应用程序时,优化SQL查询的性能是至关重要的。MySQL提供了一些强大的工具和技术,帮助我们进行SQL性能分析,找出潜在的瓶颈并进行相应的优化。

    查看SQL的执行频率

    show [ session| global ] status 命令查看服务器状态信息,可以查看当前数据库的INSERT、UPDATE、DELETE、SELECT的访问频次

    -- session 是查看当前会话的select(当前数据库,关闭数据库重置) ;
    show session status like 'com_select';
    -- 查询全部
    show session status like  'com_______';
    -- global 是查询全局数据(整个连接的所有数据库) ;
    show global status like  'com_______';

    慢查询日志(Slow Query Log)

    MySQL的慢查询日志是一种记录执行时间超过阈值(默认10s)的SQL语句的日志,通过启用慢查询日志,我们可以收集执行时间较长的SQL语句,进而分析和优化这些查询。

    -- 通过命令 - 查看慢查询日志状态(默认是开启的)
    show variables like 'slow_query_log';
    -- 时间参数
    show variables like 'long_query_time';

    -- 也可以修改

    -- 关闭和开启
    -- set global slow_query_log = 'off';
    set global slow_query_log = 'on';

    -- 设置时间阈值,SQL语句执行时间超过10秒,就会视为慢查询,记录慢查询日志
    set session long_query_time =10;

    命令修改只是对当前回话状态有效,当关闭数据库后,会重置,如果想全局服务器有效,就修改配置文件(Windows是my.ini,一般在MySQL数据安装目录下。Linux是my.cnf ,该文件通常位于 /etc 目录下,或者MySQL安装目录下)。

    找到该位置的配置就能修改慢查询日志状态了,1:开启,0:关闭,时间参数是10s

    然后执行查询语句,对数量有一定要求(可能10w+数据到达1秒),才能到达慢查询时间阈值。

    通过慢查询日志,就可以定位出执行效率比较低的SQL,从而有针对性的进行优化。

    explain命令

    explain命令是MySQL提供的一个强大的工具,用于分析查询语句的执行计划,通过执行explain命令,我们可以获取查询语句的执行计划、访问的索引、表之间的连接方式等重要信息。这些信息可以帮助我们理解查询的执行过程,找出可能存在的性能问题,并做出相应的优化。

    -- 直接在select语句之前加上关键字 explain / desc

    explain select 列名 from 表名 where 条件;

    -- 
    explain select name from employees where name='张三' ;

    查询性能分析器(Query Profiler)

    MySQL提供了一个查询性能分析器,可以帮助我们深入了解查询语句的执行情况。通过查询性能分析器,我们可以获取查询语句的执行时间、扫描的行数、使用的索引等详细信息。这些信息可以帮助我们找出查询中的瓶颈,并针对性地进行性能优化。

    -- 查询profiling状态
    SELECT  @@profiling ;


    -- 开启或关闭
    SET profiling = 1;
    SET profiling = 0;

    -- 查询SQL耗时
    show profiles

    -- 查看指定query_id的SQL语句各个阶段的耗时情况
    show profile for query 5;

    -- 查看指定query_id的SQL语句CPU的使用情况
    show profile cpu for query 5;

    数据库优化工具

    除了MySQL自带的工具外,还有一些第三方的数据库优化工具可以帮助我们进行SQL性能分析。比如,Percona Toolkit(开源工具集)、Enterprise Monitor(是商用的)。

  • 相关阅读:
    责任链模式
    SpringBoot定时任务(@EnableScheduling注解)
    iOS 事件响应链
    B40 - 基于STM32单片机的电热蚊香蓝牙控制系统
    这是我见过最详细易懂的Redis笔记(PDF可下载),上线三天破百万点赞
    【作业】python课-实验一
    猫12分类:使用yolov5训练检测模型
    vue3封装element-plus的Form表单
    linux网络协议栈源码分析 - 传输层(TCP的输出)
    Java 的 Apache Commons 工具库 助力开发
  • 原文地址:https://blog.csdn.net/DU9999999/article/details/133456308