百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> MySQL中Explain的用途总结(细致)
分享文章到:

MySQL中Explain的用途总结(细致)

发布时间:08/01 来源:未知 浏览: 关键词:
本篇文章给大家带来的内容是对于MySQL中Explain的用途总结(细致),有一定的参照 价值,有需要的伴侣可以参照 一下,但愿对你有所帮忙。 本篇文章给大家带来的内容是对于MySQL中Explain的用途总结(细致),有一定的参照 价值,有需要的伴侣可以参照 一下,但愿对你有所帮忙。

施行规划(query Execution plan)

语法

explain select * from table

explain 中的列

expain出来的信息有10列,
离别是id,select_type,table、type,partitions,possible_keys,key,key_len,ref,rows,Extra,下面临这些字段涌现的可能进行解释:

一、ID

SQL施行的次序的标识,SQL从大到小的施行

1、ID雷同时,施行次序由上至下

2、要是是子查询,ID的序号会递增,ID值越大优先级越高,越先被施行

3、ID要是雷同,可以以为是一组,从上往下次序施行;在所有组中,ID值越大,优先级越高,越先施行

二、select_type

示查询中每个select子句的类型

1、SIMPLE:简略的SELECT,不有用UNION或者子查询。

2、PRIMARY:最外层SELECT。

3、UNION:第二层,在SELECT之后运用了UNION。

4、DEPENDENT UNION:UNION语句中的第二个SELECT,依赖于外部子查询。

5、UNION RESULT:UNION的效果。

6、SUBQUERY:子查询中的首先个SELECT。

7、DEPENDENT SUBQUERY:子查询中的首先个SELECT,取决于外面的查询。

8、DERIVED:导出表的SELECT(FROM子句的子查询)

9、MATERIALIZED:物化子查询

10、UNCACHEABLE SUBQUERY:没法缓存效果的子查询,必需为外部查询的每一行从新盘算

11、UNCACHEABLE UNION:UNION 属于不成缓存的子查询的第二个或后一个选中

三、table

输出行援用的表的名称。这也可以是下列值之一:

  • M,N,...>:该行指的是id值为M和id值为N的并集。

  • N>:该行是指用于与该行的派生表效果id的值 N。例如,派生表可以来自FROM子句中的子查询

  • N>:该行指的是id 值为的行的概括化子查询的效果N

四、type

表示MySQL在表中寻到所需行的方式,又称“拜访类型”。

常用的类型有: NULL, system, const, eq_ref, ref, range, index, ALL(从左到右,机能从差到好)
下列列表描述了从最好类型到最差类型的连贯类型

NULL
MySQL在优化历程中分解语句,施行时甚至不消拜访表或索引,例如从一个索引列里拔取最小值可以通过独自索引查寻完成。

system
该表只要一行(如:系统表)。这是const连贯类型的特例

const
该表最多只要一个匹配行,在查询开头读取。由于只要一行,所以优化器的其余局部可以将此行中列的值视为常量。 const表非常快,由于它们只读一次。

SELECT * FROM tbl_name WHERE primary_key=1;
SELECT * FROM tbl_name WHERE primary_key_part1=1 AND primary_key_part2=2;

eq_ref
关于前面表格中的每个行组合,从该表中读取一行。除了 system和 const类型以外,这是最佳的连贯类型。当连贯运用索引的所有局部且索引是 索引PRIMARY KEY或UNIQUE NOT NULL索引时运用它。

SELECT * FROM ref_table,other_table
  WHERE ref_table.key_column=other_table.column;

SELECT * FROM ref_table,other_table
    WHERE ref_table.key_column_part1=other_table.column
    AND ref_table.key_column_part2=1;

ref
表示上述表的连贯匹配前提,即哪些列或常量被用于查寻索引列上的值

fulltext
运用FULLTEXT 索引施行连贯。

ref_or_null

SELECT * FROM ref_table WHERE key_column IS NULL;

index_merge
该指数合并拜访办法检索与多行 range扫描和他们的效果合并到一个。此拜访办法仅合并来自单个表的索引扫描,而不扫描多个表。合并可以生成其根基扫描的结合,穿插或穿插结合

SELECT * FROM tbl_name WHERE key1 = 10 OR key2 = 20;

SELECT * FROM tbl_name
WHERE (key1 = 10 OR key2 = 20) AND non_key = 30;

SELECT * FROM t1, t2
WHERE (t1.key1 IN (1,2) OR t1.key2 LIKE 'value%')
AND t2.key1 = t1.some_col;

SELECT * FROM t1, t2
WHERE t1.key1 = 1
AND (t2.key1 = t1.some_col OR t2.key2 = t1.some_col2);

unique_subquery
此类型替代 下列情势的eq_ref某些 IN子查询:

value IN (SELECT primary_key FROM single_table WHERE some_expr)

index_subquery
此连贯类型相似于 unique_subquery。它替代IN子查询,但它适用于下列情势的子查询中的非独一索引:

value IN (SELECT key_column FROM single_table WHERE some_expr)

range
仅检索给定范畴内的行,运用索引选中行。的key 输出行中的列指挥运用哪个索引。将key_len包括已运用的工夫最长的关键局部。该ref列 NULL适用于此类型。
range当一个键柱运用任何的比拟于恒定可运用 =, <>, >, >=, <, <=, IS NULL, <=>, BETWEEN, LIKE,或 IN()经营商:

index
该index联接类型是同样的 ALL,只是索引树被扫描。这种状况有两种:

1、要是索引是查询的遮盖索引,而且可用于知足表中所需的所有数据,则仅扫描索引树。在这种状况下,Extra专栏说 Using index。仅索引扫描平常比ALL索引的大小平常小于表数据更快 。

2、运用索引中的读取施行全表扫描,以按索引次序查寻数据行。 Uses index没有涌现在 Extra列中。当查询仅运用属于单个索引的列时,MySQL可以运用此连贯类型。

ALL
对前面表格中的每个行组合进行全表扫描。要是表是首先个未标志的表 const,平常欠好,而且在所有其他状况下平常 非常糟糕。平常,您可以ALL通过增加基于常量值或早期表中的列值从表中启用行检索的索引来以免

五、possible_keys

该possible_keys列指挥MySQL可以选中在此表中查寻行的索引,指出MySQL能运用哪个索引在表中寻到记载,查询波及到的字段上若存在索引,则该索引将被列出,但纷歧定被查询运用

该列完全独立于EXPLAIN输出所示的表的顺序。这意味着在possible_keys中的某些键现实上不克不及按生成的表顺序运用。
要是该列是NULL,则没有相干的索引。在这种状况下,可以通过检查WHERE子句看可否它援用某些列或适合索引的列来提高你的查询机能。要是是这样,制造一个恰当的索引而且再次用EXPLAIN检查查询

六、Key

key列显示MySQL现实决议运用的键(索引)

要是没有选中索引,键是NULL。要想强迫MySQL运用或忽视possible_keys列中的索引,在查询中运用FORCE INDEX、USE INDEX或者IGNORE INDEX。

七、key_len

表示索引中运用的字节数,可通过该列盘算查询中运用的索引的长度(key_len显示的值为索引字段的最大可能长度,并非现实运用长度,即key_len是依据表定义盘算而得,不是通过表内检索出的)

不亏损精准性的状况下,长度越短越好

八、ref

表示上述表的连贯匹配前提,即哪些列或常量被用于查寻索引列上的值

九、rows

表示MySQL依据表统计信息及索引选用状况,预算的寻到所需的记载所需要读取的行数

十、Extra

该Extra列 EXPLAIN输出包括MySQL解决查询的额外信息。下列列表注明了此列中可能涌现的值。每个项目还指挥JSON格局的输出哪个属性显示Extra值。关于其中一些,有一个特定的属性。其他显示为message 属性的文本

十一、partitions(扩展)

记载将与查询匹配的分区。仅在运用PARTITIONS关键字时才显示此列 。非分区表显示null

本篇文章到这里就全部完毕了,对于MySQL的更多见识大家可以关注 百分百源码网 的MySQL教程栏目!!!

以上就是MySQL中Explain的用途总结(细致)的细致内容,更多请关注 百分百源码网 其它相干文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有150人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板