三、查找需要优化语句

1、慢查询日志

是一种mysql提供的日志,记录所有执行时间超过某个时间界限的sql的语句。这个时间界限,我们可以指定。在mysql中默认没有开启慢查询,即使开启了,只会记录执行的sql语句超过10秒的语句。

方式一、临时启动慢查询记录日志

  1. mysqld.exe --slow-query-log

注意:先把mysql关闭后,再执行以上指令启动。

通过慢查询日志定位执行效率较低的SQL语句。慢查询日志记录了所有执行时间超过long_query_time所设置的SQL语句。

  1. 在默认情况下,慢查询日志是存储到data目录下面的。根据配置文件里面的配置,找到data的存储路径。

查找需要优化的语句 - 图1

  1. 可以通过命令查看慢查询日志的时间
    1. show variables like 'long_query_time';


查找需要优化的语句 - 图2

修改慢查询日志时间:

  1. -- 改为0.5s
  2. set long_query_time=0.5;

查找需要优化的语句 - 图3

  1. 测试查询
    1. -- benchmark(count,expr)函数可以测试执行countexpr操作需要的时间。
    2. select benchmark(100000000,90000000*4);


查看慢查询日志

查找需要优化的语句 - 图4

  1. 一般情况下,一个sql语句执行比较慢,原因是没有索引
    没有添加索引之前查询时间如下:
    查找需要优化的语句 - 图5
    添加索引之前,索引文件大小如下;
    查找需要优化的语句 - 图6
    添加索引:
    1. alter table emp add index(empno);


查找需要优化的语句 - 图7
添加索引后,索引文件变大。
查找需要优化的语句 - 图8
添加索引之后需要的时间;
查找需要优化的语句 - 图9

结论:创建完索引后,索引文件会变大,添加索引会明显的提高查询速度。

方式二、直接修改配置文件

查找需要优化的语句 - 图10

在配置文件中指定:

log-slow-queries=”d:/slow-log”

慢查询日志文件存储的路径,当前是把慢查询日志存储到d:盘下面,文件名为slow-log

long_query_time=1

指定慢查询的时间,默认是10秒,我们自定义成1或0.05秒,也就是说当一个sql语句的执行速度超过1秒时,会把该语句添加到慢查询日志里面,

查找需要优化的语句 - 图11

注意:通过配置文件是永远的开启慢查询日志

2、精确记录查询时间

  1. 使用mysql提供profile机制完成。
  2. profile记录每次执行的sql语句的具体时间,精确时间到小数点8

开启profile机制:

  1. set profiling = 1;

执行需要分析的sql语句(自动记录该sql的时间)

查找需要优化的语句 - 图12

查看记录sql语句的执行时间:

  1. show profiles;

查找需要优化的语句 - 图13

注意:不需要分析时,最好将其关闭

  1. set profiling=0;