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

文章目录

          • 一、SQL及索引优化

一、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语句记录信息。

你可能感兴趣的:(mysql,mysql)