学习篇-mysql-优化01-简单排查

一、SQL及索引优化

问题SQL筛查步骤:

  • 检查慢查日志是否打开:

    // 查询慢查日志是否打开
    show variables like 'slow_query_log';
    // 开启慢日志
    set global slow_query_log=on;
    // 开启所有执行语句,记录到日志文件,不可轻易打开
    set global log_queries_not_using_indexes=on;
    
  • 检查慢日志路径:

    // 查询慢查日志存储路径
    show variables like '%slow_query_log_file';
    // 实时查看日志 非mysql命令,mac系统下如果出现权限问题,请使用sudo
    tail -f /usr/local/mysql/data/xxx-slow.log
    
  • 慢日志判断标准(默认查询时间大于10s的sql语句)

    // 查询慢查日志判断标准时间
    show variables like 'long_query_time';
    // 设置判断标准时间
    set global long_query_time=1;
    
  • 其他命令

    // 测试 睡眠12秒
    select sleep(12);
    // 查看创建表语句
    show create table xxx
    // 创建索引
    create index idx_id on t1(id);
    // 查询mysql
    select @@version
    

数据演示:

  • 数据准备

    • 建表3部曲

      create database test;
      use test;
      create table t1(id int, name varchar(255));
      
    • 使用存储过程,灌入10万条数据

      DROP PROCEDURE IF EXISTS pro_t1;
      delimiter $$
      create procedure pro_t1()
      begin
      declare i int;
      set i=0;
      while i<100000 do
          insert into t1 (id,name)
          values(i,CONCAT(‘smartan’,i)); 
      set i=i+1;
      end while;
      end
      $$
      delimiter ;
      call pro_t1();
      
    • 日志检测 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qC6eMpdM-1597059782202)(../mysql-imgs/3807C788-E3F7-45AE-A313-C5F29CA66153.png)]

      • 第一行,SQL查询执行的时间
      • 第二行,执行SQL查询的连接信息,用户和连接IP
      • 第三行,记录了一些比较有用的信息:
        • Query_time:这条SQL执行的时间,越长越慢
        • Lock_time:在mysql服务器阶段(不是在存储引擎阶段)等待表锁时间
        • Rows_sent:查询返回的行数
        • Rows_examined:查询检查的行数,越长越费时间
      • 第四行,设置时间戳,没有实际意义,只是和第一行对应执行时间
      • 第五行及后面所有行,执行的sql语句记录信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值