艺考网
全国站

mysql查询优化explain命令详解

xunaa
2024-10-05 07:20:01
编辑说
使用起来非常简单,比如
解释一下select * from user .
执行后,会出现一个解释计划表。参数含义请参考以下参数。针对这些解释方案,我们可以进行相应的优化。
id mysql查询

使用起来非常简单,比如

解释一下select * from user .

执行后,会出现一个解释计划表。参数含义请参考以下参数。针对这些解释方案,我们可以进行相应的优化。

id mysql查询标识符,即序列号。

select_type 查询类型

Simple:简单的select查询,不包括union和子查询;

Primary:最外层的select查询;

union:表示本次查询是union的第二个或后续查询;

依赖联合:联合中的第二个或后续查询语句依赖于外部查询;

union result:并集的结果;

子查询:子查询中的第一个select;

依赖子查询:子查询中的第一个select依赖于外层查询,即子查询依赖于外层查询的结果。

table 所有查询的表。

type是连接类型,是比较重要的一项。从这一项,我们可以看到高效与否的一个重要依据。

性能从最好到最差如下:

system:表中只有一条数据,是一种特殊的const类型;

const:对主键或唯一索引的等效查询扫描最多仅返回一行数据。 const 查询非常快,因为它只读取一次;

eq_ref:这种类型通常出现在多表的连接查询中,也就是说前一个表中的每个结果只能匹配后一个表中的一行结果,并且查询的比较操作通常是=,这样查询结果会更高效率;

ref:该类型通常出现在多表连接查询中,针对非唯一或非主键索引,或者使用最左前缀规则索引的查询;

fulltext:全文索引检索,请注意全文索引的优先级非常高。如果全文索引和普通索引同时存在,MySQL会不计代价优先使用全文索引;

ref_or_null:与ref方法类似,只不过增加了null值的比较。实际上用得并不多;

mysql查询优化explain命令详解

unique_subquery:用于where中的in-form子查询,子查询返回唯一值,没有重复值;

index_subquery:用于使用辅助索引或常量列表的形式子查询。子查询可能返回重复值,可以利用索引对子查询进行去重;

index_merge:表示查询使用两个以上索引,最后取交集或并集。常见的and 和or 条件使用不同的索引。官方排序是在ref_or_null之后,但实际上,因为需要读取所有索引,所以性能可能大部分时候不如range;

Range:表示使用索引范围查询,通过索引字段范围来获取表中的一些数据记录。该类型通常出现在=、=、=、IS NULL、=、BETWEEN、IN 操作中。此时,输出的ref 字段为NULL,key_len 字段是本次查询中使用的最长索引。

Index:全表扫描,但按照索引顺序而不是按行扫描表。主要优点是避免了排序,但开销仍然很高。此时Extra字段会显示Using index;

all:性能最差的情况,使用全表扫描时,系统必须避免这种情况。

possible_keys 可能的索引。

key实际使用的索引。

key_len 使用索引字节的长度。

ref 显示使用索引的哪一列。

rows 扫描的行数也是性能评估的重要依据。

额外的配额信息,常见的如下。

Distinct:一旦找到与并集匹配的行,就不再进行搜索;

using filesort:使用文件排序,性能很慢,需要优化。

使用索引:查询使用索引,从表中返回列数据,只使用索引中的信息,而不读取实际动作。当表的所有请求列都是同一索引的一部分时,就会发生这种情况。

使用temporary:使用临时表排序,性能很慢,需要优化。

using where:表示使用where进行查询,这个不是很重要。

ALL:此连接类型联合执行每个先前记录的完整扫描。这通常是不好的,需要优化。

执行计划的具体解释可以参考msyql官网:

https://dev.mysql.com/doc/refman/5.7/en/explain-output.html

扩张

用户评论

不浪漫罪名

学习数据表的结构很重要啊,才能更好地用explain 命令分析。

    有5位网友表示赞同!

娇眉恨

感觉这篇文章挺详细的,解释了各个参数意义很清楚!

    有7位网友表示赞同!

良人凉人

MySQL 查询速度很慢的时候,这个 explain 命令可真有用!

    有7位网友表示赞同!

致命伤

好久没碰过查询优化了,来看看能不能借鉴一下

    有5位网友表示赞同!

恰十年

学习了解这些 Explain 可以更快找到性能瓶颈啊!

    有13位网友表示赞同!

一生荒唐

看了这么多优化技巧,感觉自己还是入门级

免责声明
本站所有收录的学校、专业及发布的图片、内容,均收集整理自互联网,仅用于信息展示,不作为择校或选择专业的建议,若有侵权请联系删除!

大家都在看

mysql查询优化explain命令详解

mysql查询优化explain命令详解

使用起来非常简单,比如 解释一下select * from user . 执行后,会出现一个解释计划表。参数含义请参考以下参数。针对这些解释方案,我们可以进行相应的优化。 id mysql查询
2024-10-05
MySQLSQL性能分析与优化工具详解

MySQLSQL性能分析与优化工具详解

系统的性能取决于我们SQL的查询速度。 MySQLExplain命令是分析SQL性能和优化不可或缺的一部分。 解释就是我们所说的解释器。通过explain,我们可以知道以下信息:表的读取顺序
2024-10-05
MySQL : 讲解快速查询手册

MySQL : 讲解快速查询手册

二 . explain 使用 三. 业务实践 在日常实践中,我们应该如何使用explain提供的查询来确定如何配置索引? 以实际业务场景为例。 首先,场景中的数据分布非常均衡,这导致设置的索
2024-10-05
MySQL性能优化工具详解

MySQL性能优化工具详解

解释SELECT * from user_info WHERE id 300;准备 为了方便演示EXPLAIN的使用,首先我们需要创建两张表用于测试,并添加相应的数据: 创建表`user_info` ( `id` BIGINT(20) N
2024-10-05
这次真的救了我,MySQL索引优化,解释的很清楚。

这次真的救了我,MySQL索引优化,解释的很清楚。

本文主要讲如何使用explain,以及explain的各种参数概念,后面会讲优化。 一、Explain 用法 模拟Mysql优化器如何执行SQL查询语句,了解Mysql如何处理你的SQL语句。分析查询语句
2024-10-05
mysql 解释用法

mysql 解释用法

使用时只需在select语句前添加explain即可,如: 解释select * from statuses_status where id=11; 解释栏解释 table:显示这行数据与哪个表相关 type:这是重要的列,显示连接使
2024-10-05
面试官:如何使用explain来分析SQL执行性能?

面试官:如何使用explain来分析SQL执行性能?

介绍 在工作中,我们捕获性能问题最常用的方法就是打开慢查询,定位执行效率差的SQL。然后当我们找到一条SQL时,我们还没有完成。我们还需要知道SQL的执行计划。比如全表扫描或者
2024-10-05
“对不起”不是“对不起”,小心别人看你!

“对不起”不是“对不起”,小心别人看你!

“熟悉的单词有部分含义”是英语中的常见情况。似乎每一个字都认识,但连在一起却又不知道是什么意思。 这里的“Excuse me for a moment”并不意味着“Excuse me for
2024-10-05
英语报告厅| “对不起”就是“对不起”吗?

英语报告厅| “对不起”就是“对不起”吗?

英语报告厅 “对不起”只是“对不起”吗? 英语口语中经常使用“Excuse me”这个短语。在我们看来,这句话也应该意味着“对不起”。然而,事实并非如此! “Excuse me”常用于以
2024-10-05
“Excuse me”的意思是“对不起”,但是“Excuse you”呢?

“Excuse me”的意思是“对不起”,但是“Excuse you”呢?

众所周知,Excuse me的意思是“对不起”,常用于某些场合表达歉意或打扰对方。 那么,既然你学了这么多年《Excuse me》,你见过《Excuse you》吗?你知道它的含义和具体用途吗?今天
2024-10-05