mysql explain 慢查询_mysql explain、慢查询

本文深入探讨了MySQL查询优化的关键方面,包括查询类型(select_type)、索引类型(type)以及执行计划中的其他关键指标。了解如何通过id、possible_keys、key、rows和extra字段分析查询效率。同时,讲解了慢查询日志的启用、配置及分析工具,帮助优化数据库性能。
摘要由CSDN通过智能技术生成

使用 explain 分析语句

2f110e0673e088725377170e54f1245a.png

id 标识一个子查询

id相同执行顺序由上至下。

id不同,id值越大优先级越高,越先被执行。

id为null时表示一个结果集,不需要使用它查询,常出现在包含union等查询语句中。

select_type 查询类型

691ca9ed3e6e4fe52b162bfc018d8a7d.png

type:访问方法

ALL 扫描全表数据

index 遍历索引

range 索引范围查找

index_subquery 在子查询中使用 ref

unique_subquery 在子查询中使用 eq_ref

ref_or_null 对Null进行索引的优化的 ref

fulltext 使用全文索引

ref 使用非唯一索引查找数据

eq_ref 在join查询中使用PRIMARY KEYorUNIQUE NOT NULL索引关联。

possible_keys

对某表进行单表查询时可能用到的索引

key

经过查询优化器计算不同索引的成本,最终选择成本最低的索引

key_length 索引长度

ref 表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值

rows

如果使用全表扫描,那么rows就代表需要扫描的行数

如果使用索引,那么rows就代表预计扫描的行数

extra 的信息非常丰富,常见的有:

Using index 使用覆盖索引

Using where 使用了用where子句来过滤结果集

Using filesort 使用文件排序,使用非索引列进行排序时出现,非常消耗性能,尽量优化。

Using temporary 使用了临时表

使用命令:

show variables like 'log_slow_queries' 是否开启慢查询

show variables like 'show_query_log' 是否开启慢查询日志

set global show_query_log_file = '/.../slow.log' 日志位置

set global log_queries_not_using_indexes = on; 记录没有使用索引的语句

set global long_query_time = 1; 记录超过1秒的语句

在my.ini里配置:

log-slow-queries = '/.../slow.log'

log-queries-not-using-indexes = on

long_query_time = 1

慢查询日志分析工具:

mysqldumpslow(官方) 一般集成在MySQL安装包中 pt-query-digest

set profiling=on 开启profile,记录sql语句的详细执行信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值