纯干货:Mysql性能优化Explain分析

纯干货:Mysql性能优化Explain分析,第1张

概述介绍《纯干货:Mysql性能优化Explain分析》开发教程,希望对您有用。

《纯干货:MysqL性能优化Explain分析》要点:
本文介绍了纯干货:MysqL性能优化Explain分析,希望对您有用。如果有疑问,可以联系我们。

MysqL 提供了一个 EXPLAIN 命令,它可以对 SELECT 语句进行分析,并输出 SELECT 执行的详细信息,以供开发人员针对性优化

EXPLAIN 用法:

EXPLAIN SELECT * FROM test WHERE ID = 100;

测试表结构以及测试数据:

数据表结构

数据

EXPLAIN 输出格式

各列含义

ID

SELECT 查询的标识符. 每个 SELECT 都会自动分配一个唯一的标识符.

select_type

SELECT 查询的类型.

table

查询的是哪个表

type

join 类型

possible_keys

此次查询中可能选用的索引

key

此次查询中确切使用到的索引.

ref

哪个字段或常数与 key 一起被使用

rows

显示此查询一共扫描了多少行. 这个是一个估计值.

extra

其他信息

select_type 常用取值

SIMPLE

简单的 select 查询,不使用 union 及子查询

PRIMARY

最外层的 select 查询

UNION

UNION 中的第二个或随后的 select 查询,不 依赖于外部查询的结果集

DEPENDENT UNION

UNION 中的第二个或随后的 select 查询,依 赖于外部查询的结果集

SUBquery

子查询中的第一个 select 查询,不依赖于外 部查询的结果集

DEPENDENT SUBquery

子查询中的第一个 select 查询,依赖于外部 查询的结果集

DERIVED

用于 from 子句里有子查询的情况. MysqL 会 递归执行这些子查询,把结果放在临时表里.

UNCACHEABLE SUBquery

结果集不能被缓存的子查询,必须重新为外 层查询的每一行进行评估.

UNCACHEABLE UNION

UNION 中的第二个或随后的 select 查询,属 于不可缓存的子查询

type 显示连接使用的类型,按最 优到最差的类型排序说明

system

表仅有一行(=系统表).这是 const 连接类型的一个特例.

constconst

用于用常数值比较 PRIMARY KEY 时.当 查询的表仅有一行时,使用 System.

eq_refconst

用于用常数值比较 PRIMARY KEY 时.当 查询的表仅有一行时,使用 System.

ref

连接不能基于关键字选择单个行,可能查找 到多个符合条件的行. 叫做 ref 是因为索引要 跟某个参考值相比较.这个参考值或者是一 个常数,或者是来自一个表里的多表查询的 结果值.

ref_or_null

如同 ref,但是 MysqL 必须在初次查找的结果 里找出 null 条目,然后进行二次查找.

index_merge

说明索引合并优化被使用了.

unique_subquery

在某些 IN 查询中使用此种类型,而不是常规的 ref:value IN (SELECT primary_key FROM single_table WHERE some_expr)

index_subquery

在 某 些 IN 查 询 中 使 用 此 种 类 型,与 unique_subquery 类似,但是查询的是非唯一 性索引: value IN (SELECT key_column FROM single_table WHERE some_expr)

range

只检索给定范围的行,使用一个索引来选择 行.key 列显示使用了哪个索引.当使用=、 <>、>、>=、<、<=、IS NulL、<=>、BETWEEN 或者 IN *** 作符,用常量比较关键字列时,可 以使用 range.

index

全表扫描,只是扫描表的时候依照索引次序 进行而不是行.主要优点就是避免了排序,但是开销仍然非常大.

all

最坏的情况,从头到尾全表扫描.

type 类型的性能关系如下:

ALL < index < range ~ index_merge < ref < eq_ref < const < system

在使用过程中,经常关注的是 type 和 Extra,主要为了判断执行的SQL语句是否使用到了索引或者是否是全表扫描等等!

全表扫描

以上仅仅是列出了很简单的一些理论知识和简单的SQL语句分析,详细的还需要各位多多查阅资料!总之:

MysqL 中的 explain 语法可以赞助我们改写查询,优化表的结构和索引的设置,从而最大地提高查询效率.

欢迎参与《纯干货:MysqL性能优化Explain分析》讨论,分享您的想法,内存溢出PHP学院为您提供专业教程。

总结

以上是内存溢出为你收集整理的纯干货:Mysql性能优化Explain分析全部内容,希望文章能够帮你解决纯干货:Mysql性能优化Explain分析所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1156612.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存