• 【SQL】MySQL中的SQL优化、explain执行计划


    • 查看SQL执行频率
    -- 查看当前会话统计结果
    show session status like 'Com_______';
    -- 查看自数据库上次启动至今统计结果
    show global status like 'Com_______';
    
    • 1
    • 2
    • 3
    • 4
    • 定位低效率执行SQL
      两种定位方式:
      1.查看慢查询日志
      2.通过show processlist查看所有正在运行的线程
    • explain分析执行计划
    -- 查询执行计划
    explain select * from role r , (select * from user_role ur where ur.uid = (select uid from user where uname = '张飞')) t where r.rid = t.rid
    
    • 1
    • 2

    在这里插入图片描述

    字段含义
    idid越大优先级越高,越先执行,id相同加载表的顺序从上到下
    select_type表示select的类型
    table输出结果的表
    type表的连接类型
    possible key可能使用的索引
    key实际使用的索引
    key_len索引字段的长度
    rows扫描行的数量
    extra执行情况的说明和描述

    select_type:

    select_type含义
    SIMPLE简单的select查询,没有子查询或union
    PRIMARY主查询,子查询中的最外层查询
    SUBQUERY在select或where里的子查询
    DERIVED在from列表里包含的子查询,被标记为derived(衍生)
    UNION第二个select出现在union之后,则标记为union
    UNION RESULT从union表获取结果的select

    type:
    效率:system > const > eq_ref > ref > range > index > all

    type含义
    NULL没有访问任何表
    system系统表,少量数据;5,7及以上版本显示的是all
    const命中主键索引或者唯一索引
    eq_ref左表命中主键索引,且左表每一行对应右表每一行
    ref左表命中非唯一性索引(主键索引和唯一索引都是唯一性索引)
    range范围查询,使用between,<,>,in等操作
    index仅扫描索引列的值
    all全表扫描
    • show profile分析SQL执行时间
    -- 查看是否支持profile
    select @@have_profiling;
    -- 开启profiling开关
    set profiling = 1;
    
    • 1
    • 2
    • 3
    • 4

    执行一系列sql语句后执行show profiles,可用来查看各个SQL语句的耗费时长
    在这里插入图片描述
    使用show profile查询某条SQL语句每个过程的花费时间

    -- 用来查看query_id对应的SQL执行过程中,每个过程的花费时间。
    show profile for query query_id;
    
    • 1
    • 2

    • trace分析优化器执行计划(仅了解)
    -- 打开trace,设置格式为json
    set optimizer_trace = "enabled=on",end_markers_in_json=on;
    -- 设置trace最大可使用的内存
    set optimizer_trace_max_men_size = 1000000;
    
    • 1
    • 2
    • 3
    • 4

    查询trace,知道优化器如何执行的sql

    select * from information_schema.optimizer_trace\G;
    
    • 1

    SQL优化

    • 大批量插入数据
    • insert优化
    • order by 优化
    • 子查询优化
    • limit优化
  • 相关阅读:
    CRM客户关系管理系统开发源码小程序
    ResNet 简介
    [C++][算法基础]Nim游戏(博弈论)
    一文详细理解计算机网络 - 物理层(考试和面试必备)
    排序算法(1)
    PaddleOCR学习笔记2-初步识别服务
    Spring-IoC(XML配置文件形式)
    【计算商品总价~python+】
    软件测试:Python+appium自动化测试详解
    异常值检测!最佳统计方法实践(代码实现)!⛵
  • 原文地址:https://blog.csdn.net/qq_33218097/article/details/133758843