6.MySQL优化(1)

本章要点

1.慢SQL
2.性能剖析工具

1. 慢SQL

SHOW GLOBAL  VARIABLES LIKE   '%SLOW_QUERY%';
---slow_query_log:慢SQL日志是否开启;- slow_query_log_file:目录地址
set global slow_query_log=on;---开启慢查询
SHOW VARIABLES LIKE 'long_query_time'; --- 耗时多久时间是慢查询,默认10s

2.性能剖析工具

2.1 pt-query-digest

pt-query-digest是用于分析mysql慢查询的一个工具,它可以分析binlog、General log、slowlog等

常用命令

  • 分析慢查询日志中SQL的统计结果:pt-query-digest /var/lib/mysql/localhost-slow.log | more

  • 分析select语句统计结果:pt-query-digest --filter '$event->{fingerprint} =~ m/^select/i' /var/lib/mysql/localhost-slow.log | more

  • 查询指定用户(root)访问的查询:pt-query-digest --filter '($event->{user}) =~ m/^root/i' /var/lib/mysql/localhost-slow.log | more

  • 分析所有全表扫描语句的统计结果:pt-query-digest --filter '(($event->{Full_scan} || "") eq "yes")' /var/lib/mysql/localhost-slow.log | more

  • 分析所有Full join语句的统计结果:pt-query-digest --filter '(($event->{Full_join} || "") eq "yes")' /var/lib/mysql/localhost-slow.log | more

2.2 SHOW PROFILE

定位到需要优化的单条查询后,可以针对此查询进行进一步分析,获取更多信息,确认为什么会花费这么长时间,以及需要如何去优化。

SHOW  VARIABLES LIKE  '%profiling%'  -- 查看是否开启
SET profiling=ON  --开启profiling
SHOW PROFILES -- 查看开启工具后的每条SQL执行总体情况
SHOW PROFILE FOR QUERY 1;-- 根据query_id查看某个查询的详细时间耗费
2.3 执行计划——EXPLAIN

执行计划中的列

  • table:对应的表
  • type:连接类型(system、const、eq_ref、ref、range、index、all)
  • possible_keys:可能使用的索引
  • key:实际使用的索引
  • key_len:使用索引长度
  • rows:预计扫描行数
  • Extra:解析查询的额外信息(using index、using where、using temporary、using filesort)

连接类型(type)

  • ALL:全表扫描,例如: explain select * from actor
  • index:按索引顺序进行全表扫描,例如: explain select actor_id from actor
  • range:按索引范围查找 ,例如:explain select * from actor where actor_id <10
  • ref:是一种索引(普通索引)访问,返回所有匹配某个值的行 ,例如:explain select last_name from actor where last_name ='AKROYD'
  • eq_ref:是一种索引访问,一般在关联查询时,例如:explain select * from actor where actor_id in (select actor_id from actor where actor_id <10)
  • const\system:使用常量对主键索引或唯一索引进行精准匹配,例如:explain select * from actor where actor_id =10

MySQL解析额外信息(Extra)

  • Using index:列数据仅仅使用了索引中的信息而没有读取实际的表
  • Using where:MySQL服务器将在存储引擎检索行后,通过Where子句条件进行过滤
  • Using temporary:MYSQL需要创建一个临时表来存储结果,用于排序
  • Using filesort:MySQL将对结果进行外部排序
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 数据库优化的目的 避免出现页面访问错误由于数据库连接timeout产生页面5xx错误由于慢查询造成页面无法加载由于...
    Hey_Shaw阅读 1,160评论 0 1
  • 一条查询语句是怎么执行的? 一条更新语句是怎么运行的? 什么是事务?什么是长事务?如何避免长事务? 如何启动一个事...
    以南之南_b9a1阅读 665评论 0 2
  • MySQL慢查询日志的开启方式 查询是否开启了慢查询日志 设置慢查询日志文件位置 设置是否需要把没有使用到索引的s...
    Herman7z阅读 384评论 0 1
  • MySQL优化 数据准备:https://dev.mysql.com/doc/index-other.html 上...
    xMustang阅读 458评论 0 0
  • 索引(在MySQL中也叫做 “键(key)")是存储引擎用于快速找到记录的一种数据结构。这是索引的基本功能。 索...
    好好学习Sun阅读 1,273评论 0 2

友情链接更多精彩内容