MySQL中级优化教程(一)——SQL常用优化工具及explain语句的使用

序言:

说来惭愧,java学了两年,期间虽在博客上记了一些东西,可也不曾写过什么系统的教程,前一段时间开始学习MySQL数据库优化相关的知识,就想着趁着这个机会好好整理一份电子档出来,即方便自己之后回顾,也可以分享给大家。

本套教程主要基于慕课网巨佬DBA出的一套MySQL优化教程,还包括笔者在学习过程中所有的思考,以及对网上大量博文的查阅与汇总,在这里感谢这些无私可爱的博主们。

希望大家发现这几篇博文的不足之处后可以批评指正,我也会不断完善,争取能帮到大家。

 

环境: 

学习环境为:MySQL8.0 + Windows10

使用工具:mysqldumpslow、pt-query-digest等(稍后介绍)

使用数据库:MySQL官方样例数据库sakila数据库

官方下载地址:https://dev.mysql.com/doc/index-other.html

 内容:

将您下载的sakila-data.sql和sakila-schema.sql两个sql文件成功导入本地数据库之后,我们就可以开始学习了。

 

1、mysqldumpslow的使用(windows):

  • 安装windows下支持执行mysqldumpslow和pt-query-digest的文件--perl;下载地址:http://strawberryperl.com/
  • 在mysql的bin目录下粘贴下载的mysqldumpslow.pl文件(一般MySQL自带的都有,在bin目录下);
  • cmd命令行进入bin目录下,输入perl mysqldumpslow.pl -h,查看使用帮助;
  • 最简单的使用:perl mysqldumpslow.pl F:/slow.log(即后边跟上日志文件的绝对路径)(注意指令的最后不要加分号)
  • 其它常用操作:-a -s -t

 

2、pt-query-digest的使用(windows):

 

3、explain语句的使用

explain可以帮助我们分析SQL语句的一些性能指标,也是非常实用的分析方法,使用方法很简单,explain + sql即可,如

EXPLAIN SELECT * FROM actor;

执行结果是:

+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+
|  1 | SIMPLE      | actor | NULL       | ALL  | NULL          | NULL | NULL    | NULL |  200 |   100.00 | NULL  |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+

 它的参数意义如下:

 

  1. table:显示这一行数据是关于哪张表的
  2. type:这是最重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const、eq_req、ref、range、index和All
  3. possible_keys:显示可能应用在这张表中的索引。如果为空,没有可能索引。
  4. key:实际使用的索引。如果为NULL,则没有使用索引。
  5. key_len:使用的索引的长度。在不损失精确性的情况下,长度越短越好。
  6. ref:显示索引的那一列被使用了,如果可能的话,是一个常数
  7. rows:mysql认为必须检查的用来返回请求数据的行数。

补充:const是常量查询,一般是查询主键或者唯一索引查询,ref常用与连接查询中,range是基于索引的范围查找,index是对索引的扫描,all是对表进行扫描。 extra列也需要注意,如果扩展列出现Using filesort,就说明查询需要优化了。mysql需要进行额外的步骤来发现如何对返回的行进行排序。它根据连接类型以及存储排序的键值和匹配条件的全部行的行指针来排序进行。出现Using temporary的时候,说明查询也需要优化,这里mysql需要创建一个临时的表来存储结果,这通常发生在对不同的序列集进行order by上,而不是group by上。
 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

请保持优秀。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值