Mysql - 慢查询和执行计划

    查看执行计划一方面是我们在写复杂sql等情况时需要专门注意(比如项目重构时,此时就需要对历史数据进行优化),还有就是根据运行的慢sql进行定时分析,所以在处理执行计划之前先看一下慢sql。

1、慢查询

    慢查询的相关参数设置:

long_query_time: 当查询时间超过多少才会被记录为慢查询,默认值为 10,可以设置为 0~10,可以指定设置为微秒;

slow_query_log: 慢查询日志开关,默认值是 0 表示关闭, 设置为 1 表示开启;

slow_query_log_file:host_name-slow.log,定义慢日志的保存地址,默认是主机名-slow.log;

log-short-format:ON表示激活,会在慢日志中记录少量日志信息【中划线,不是下划线】;

log_slow_admin_statements:默认值off,on表示写入慢查询的日志包括:ALTER TABLE、ANALYZE TABLE、CHECK TABLE、CREATE INDEX、DROP INDEX、OPTIMIZE TABLE、REPAIR TABLE;

log_queries_not_using_indexes:是否记录未使用索引的SQL

log_output:日志输出的地址,默认值为FILE,即指向slow_query_log_file配置的文件地址, 可选值有TABLE、FILE、NONE;

show VARIABLES like '%slow_query_log%', 查询slow_query_log配置项;

show VARIABLES like '%slow_query_log_file%', 查询slow_query_log_file配置项;

show VARIABLES like '%long_query_time%', 查询long_query_time配置项;

show VARIABLES like '%log_queries_not_using_indexes%', 查询log_queries_not_using_indexes配置项;

show VARIABLES like '%log_output%', 查询log_output配置项;

    慢查询日志内容:

Query_time:语句执行时间,单位秒;

Lock_time:获取锁的时间,单位秒;

Rows_sent:发送给客户端的行数;

Rows_examined:服务器层检查的行数,与此次引擎真正执行处理的行数无关;

    mysqldumpslow慢查询日志分析工具【需要按照 Perl , yum install perl 】:

-s:采用 order 排序的方式,排序方式可以有以下几种。分别是 c(访问次数)、t(查询时间)、l(锁定时间)、r(返回记录)、ac(平均查询次数)、al(平均锁定时间)、ar(平均返回记录数)和 at(平均查询时间)。其中 at 为默认排序方式。

-t:返回前 N 条数据 。

-g:后面可以是正则表达式,对大小写不敏感。

-- 按照查询时间排序,查看前10 条 SQL 语句
perl mysqldumpslow.pl -s t -t 10 "/path/my-hostname-slow.log"

 

2、执行计划

    执行计划列说明

ColumnMeaning
id数据表的读取顺序
select_type查询子句的类型
table表名
partitions分区
type数据表访问的类型,值见下面的表格
possible_keys哪些索引可以使用,优化器的可选项
key实际使用的索引
key_len使用的索引长度
ref上一个表的链接匹配条件
rows优化器查询的行数
filtered按表条件筛选的行百分比
Extra额外信息,也是可能的非常重要的性能消耗点

 

type字段【效率从低到高】

all全表扫描,即主键聚簇索引的那棵B+树
index全索引扫描
range索引列表的范围查询
index_merge合并索引,使用多个单列索引搜索
ref根据索引查找一个或者多个值
eq_ref搜索使用unique【primary key也是唯一索引】,常用于多表联查
const常亮,表最多有一个匹配行,因为只有一行,列值可以被优化器认为是常数
system系统,表只有一行(一般是MyISAM或Memory表),是const链接类型的特例

 

 

 

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值