尚硅谷Mysql高级day10(p49-52)

今天是2021-1-6

一。group by子句优化

  1. 本质是先排序再分组,与order by的优化相差不大,子句中的字段也是最好按照最左前缀排列。
  2. 尽可能的把过滤条件放到where子句中,因为where比having先执行

二。mysql慢查询日志

1.mysql提供的日志记录,慢查询日志用来记录在 MySQL 中执行时间超过指定时间的查询语句。通过慢查询日志,可以查找出哪些查询语句的执行效率低,以便进行优化
2.可以通过 log-slow-queries 选项开启慢查询日志。通过 long_query_time 选项来设置时间值,时间以秒为单位。如果查询时间超过了这个时间值,这个查询语句将被记录到慢查询日志。
3.如果不是调优需要,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。
4.开启慢查询:SET GLOBAL slow_query_log=ON
5.设置慢查询阈值为5秒:SET GLOBAL long_query_time=5;

三。show profile

1.是mysql提供可用来分析当前会话中语句执行的资源消耗情况,可以用于SQL的调优测量。
2.默认情况下,参数处于关闭状态,并保存最近15次的运行结果
3.查看是否开启:show variables like ‘profiling%’;
4.开启:set global profiling=ON。然后重新连接mysql生效
5.执行一些sql后,执行show profiles就可以看到最近执行的15次sql
6.sql诊断:show profile 参数 for query x(x表示show Profiles得到的query_id)
参数列表:

1、ALL 显示所有的开销信息

2、BLOCK IO 显示块IO相关开销

3、CONTEXT SWITCHES 上下文切换相关开销

4、CPU 显示CPU相关开销信息

5、IPC 显示发送和接收相关开销信息

6、MEMORY 显示内存相关开销信息

7、PAGE FAULTS 显示页面错误相关开销信息

8、SOURCE 显示和Source_function、Source_file、Source_line相关的开销信息

9、SWAPS 显示交换次数相关开销的信息

7.注意诊断后,对于以下status表示sql有性能问题:

1、converting heap to MyISAM 查询结果太大,内存都不够用了 往磁盘上放

2、Creating tmp table 创建临时表,用完再删(group by 有时也会创建临时表),如果数据量大,那么向临时表拷贝数据非常损耗性能

3、copying to tmp table on disk 把内存中临时表复制到磁盘

4、locked 表被锁了

猜你喜欢

转载自blog.csdn.net/qq_44727091/article/details/112298803