SQL性能调优的依据就是explain,其中type对结果影响最大,本文详细介绍了一下各个不同的type所表示的意义 ps: 网上有很多文档,但是有的并不能复现,所以再仔细研究了一下,并实验了结果...版本 mysql> SELECT VERSION(); +-----------+ | VERSION() | +-----------+ | 8.0.22 | +-----------+ type...类型从快到慢:system > const > eq_ref > ref > range > index > ALL system 表中只有一行记录(系统表)。...比如普通的非唯一索引,或者联合主键和联合唯一索引的左前缀匹配(非全匹配) mysql> explain select * from user where name='tenmao'; +----+---...最常用的有SELECT COUNT(*) mysql> explain select count(*) from user; +----+-------------+-------+----------
EXPLAIN执行计划中type字段分为以下几种: ALL INDEX RANGE REF EQ_REF CONST...,SYSTEM NULL 自上而下,性能从最差到最好 type = ALL,全表扫描,MYSQL扫描全表来找到匹配的行 (因为film表中rating不是索引) mysql> explain...(虽然where条件中没有用到索引,但是要取出的列title是索引包含的列,所以只要全表扫描索引即可,直接使用索引树查找数据) mysql> explain select title from film...表中只有一行数据,那么type就是system。...type = NULL,MYSQL不用访问表或者索引就直接能到结果。
DEFAULT NULL, PRIMARY KEY (`womanid`) ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8; #执行计划中type...定义说明: #(1)执行计划type为ALL:遍历全表来查找 explain SELECT * from user_man ; explain select * from user_man where...执行计划type为range:索引扫描范围 explain select *from user_man where manid < 10; explain select * from user_man...); #(6)执行计划type为const、system:当MySQL对查询某部分进行优化,并转换为一个常量时,使用这些类型访问。...如将主键置于where列表中,MySQL就能将该查询转换为一个常量 explain select *from user_man where manid = 8; explain select * from
对于MySQL执行计划的获取,我们可以通过explain方式来查看,explain方式看似简单,实际上包含的内容很多,尤其是输出结果中的type类型列。...理解这些不同的类型,对于我们SQL优化举足轻重,本文仅描述explian输出结果中的type列,同时给出其演示。...有关explian输出的全描述,可以参考:MySQL EXPLAIN SQL 输出信息描述 一、EXPLAIN 语句中type列的值 type: 连接类型 system...如将主键或者唯一索引置于where列表中,MySQL就能将该查询转换为一个常量 (root@localhost) [sakila]> create table t1(id int,ename varchar...=NULL MySQL不用访问表或者索引就可以直接得到结果 (root@localhost) [sakila]> explain select sysdate(); +----+------------
xplain语法---type字段案例 今天上班的时候遇到的一个慢日志问题,我在这里进行一个复盘,记录下,也帮助我自己对于explain语法的结果有个更深的了解。...InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 我们可以看到,这个表有一个主键,是id字段,一个二级联合索引,分别是age和score字段,然后我们插入数据: mysql...mysql> explain select age from test3 where score=4; +----+-------------+-------+-------+-------------...我们再看上面的explain语句,我们可以发现这个语句的possible_keys值是null,而key的值是idx_age_score,扫描行数rows是6,也就是进行了全索引树的扫描,将表中的所有记录都进行了扫描...今天跟业务方讨论之后,发现他们创建的联合索引利用率不高,表中的数据也不多,一万来条,而查询语句对score列的依赖比较严重。
,在语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,模拟MySQL优化器来执行SQL语句,执行查询时,会返回执行计划的信息,并不执行这条SQL。...(注意,如果 from 中包含子查询,仍会执行该子查询,将结果放入临时表中)。Explain结果是基于数据表中现有数据的。...Explain结果与MySQL版本有很大的关系,不同版本的优化器的优化策略不同。...语法:explain sql语句示例:mysql> explain select * from actor;+----+-------------+-------+------+------------...通 过结果中的key_len=4可推断出查询使用了第一个列:film_id列来执行索引查找。type对表访问方式,表示MySQL在表中找到所需行的方式,又称“访问类型”。
MySQL EXPLAIN详解:http://www.jianshu.com/p/ea3fc71fdc45 MySQL EXPLAIN命令是查询性能优化不可缺少的一部分,该文主要讲解explain...key_len 显示mysql在索引里使用的字节数 ref 显示了之前的表在key列记录的索引中查找值所用的列或常量 rows 为了找到所需的行而需要读取的行数,估算值,不精确。...select_type 表示查询的类型 类型 说明 simple 简单子查询,不包含子查询和union primary 包含union或者子查询,最外层的部分标记为primary subquery 一般子查询中的子查询被标记为...要想强制MySQL使用或忽视possible_keys列中的索引,在查询中使用FORCE INDEX、USE INDEX或者IGNORE INDEX。...Extra Extra是EXPLAIN输出中另外一个很重要的列,该列显示MySQL在查询过程中的一些详细信息,MySQL查询优化器执行查询的过程中对查询计划的重要补充信息。
MySQL里的explain命令内容还是很丰富的,值得好好的挖掘出不少东西来。...MySQL 5.6 5.6中的结果来看,是支持的,那么最关心的问题,数据会不会变更呢。...---------+------+------+----------------+ | id | select_type | table | type | possible_keys | key |...MySQL 5.7 在5.7中又做了一些改变,那就是对于DML的支持更加完善了,你可以通过语句的执行计划可以很清晰的看到是哪一种类型的DML(insert,update,delete),当然insert...for connection的新特性 如果对于explain开始有了一些感觉,那么我们再来看一个5.7中的新特性,那就是对connection的解析,也就是explain for connection
MySQL Explain详解 简介 执行计划(query Execution plan) 语法 explain select * from table explain 中的列 expain出来的信息有...例如,派生表可以来自FROM子句中的子查询 :该行指的是id 值为的行的具体化子查询的结果N 四、type 表示MySQL在表中找到所需行的方式,又称“访问类型”。...通常,您可以ALL通过添加基于常量值或早期表中的列值从表中启用行检索的索引来避免 五、possible_keys 该possible_keys列指示MySQL可以选择在此表中查找行的索引,指出MySQL...如果是这样,创造一个适当的索引并且再次用EXPLAIN检查查询 六、Key key列显示MySQL实际决定使用的键(索引) 如果没有选择索引,键是NULL。...根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数 十、Extra 该Extra列 EXPLAIN输出包含MySQL解决查询的额外信息。
MySQL explain explain select/update ......官方文档:https://dev.mysql.com/doc/refman/8.0/en/explain-output.html 都是越小越好,rows * filtered explain 说明 id...select_type 查询类型 table 表 partitions 分区 type 扫描类型 possible_keys 可能索引,包含key key 实际索引 key_len 索引长度 ref...列与索引的比较 rows 扫描出的行数(估算的行数) filtered 按表条件过滤的行百分比 Extra 执行情况的描述和说明 select_type 可以不记住 SIMPLE PRIMARY UNION...SUBQUERY 派生表 DERIVED、DEPENDENT DERIVED 物化子查询 MATERIALIZED 无法缓存结果子查询 UNCACHEABLE SUBQUERY、UNCACHEABLE UNION type
MySQL中explain的结果字段介绍(二) 昨天说完了执行计划的前四个字段,今天说说后面几个字段吧。...中的type字段就是const。...中的type字段的值变成了index_merge,也就是索引合并。...子查询中使用了test_explain表中的普通索引字段a_key_var和test_explain表中的主键id字段进行等值匹配,外层的where条件中我们使用的是test_explain的主键id值进行...index_subquery 这个和上面一样,但是in条件中的子查询使用的是a_key_var普通索引字段,而不是id字段: mysql:yeyztest 18:53:30>>explain select
相关文章: MySQL高性能表设计规范:http://www.jianshu.com/p/f797bbe11d76 MySQL EXPLAIN详解:http://www.jianshu.com/p/ea3fc71fdc45...image.png MySQL EXPLAIN命令是查询性能优化不可缺少的一部分,该文主要讲解explain命令的使用及相关参数说明。...select_type 表示查询的类型 类型 说明 simple 简单子查询,不包含子查询和union primary 包含union或者子查询,最外层的部分标记为primary subquery 一般子查询中的子查询被标记为...type type显示的是访问类型,是较为重要的一个指标,结果值从好到坏依次是: system > const > eq_ref > ref > fulltext > ref_or_null > index_merge...Extra Extra是EXPLAIN输出中另外一个很重要的列,该列显示MySQL在查询过程中的一些详细信息,MySQL查询优化器执行查询的过程中对查询计划的重要补充信息。
MySQL执行计划中,extra可以展示执行的一些细节,比如索引下推,覆盖索引,排序等信息,为索引优化提供了更完整的信息 常见的extra extra有很多,这里只列出了最常见的几种类型 Using...where: 查询条件中 Using index condition: 索引下推(Index Condition Pushdown) Using filesort:Server层需要做额外的排序操作...--------------+----------+---------+------+------+----------+-----------------------+ | id | select_type...| table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra.../doc/refman/8.0/en/explain-output.html#explain-extra-information Mysql-explain之Using temporary和Using
MySQL Explain详解 ?...上图是使用Explain分析的一条sql语句,下面我们来看一下各个字段的具体含义是什么 expain出来的信息有10列,分别是id、select_type、table、type、possible_keys...id值越大,优先级越高,越先执行 二、select_type 示查询中每个select子句的类型 (1) SIMPLE(简单SELECT,不使用UNION或子查询等) (2) PRIMARY(查询中若包含任何复杂的子部分...五、possible_keys 指出MySQL能使用哪个索引在表中找到记录,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用 该列完全独立于EXPLAIN输出所示的表的次序。...如果是这样,创造一个适当的索引并且再次用EXPLAIN检查查询 六、Key key列显示MySQL实际决定使用的键(索引) 如果没有选择索引,键是NULL。
最近分析一段sql 是不是命中索引的,发现有的时候 explain 是可以的,有的时候 又不行 显然我们是要下面的结果。...经过分析,原来是中间件的原因,直连mysql 的可以用 explain 连mycat 就不行。
在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引...(QEP:sql生成一个执行计划query Execution plan) mysql> explain select * from servers; +----+-------------+-----...如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行 3.id如果相同,可以认为是一组,从上往下顺序执行;在所有组中,id值越大,优先级越高,越先执行 二、select_type 示查询中每个...如果是这样,创造一个适当的索引并且再次用EXPLAIN检查查询 六、Key key列显示MySQL实际决定使用的键(索引) 如果没有选择索引,键是NULL。...• EXPLAIN不考虑各种Cache • EXPLAIN不能显示MySQL在执行查询时所作的优化工作 • 部分统计信息是估算的,并非精确值 • EXPALIN只能解释SELECT操作,其他操作要重写为
我们对系统性能分析的一部分就是数据库的分析,比如定位到查询速度慢的SQL,我们想对其进行优化,但是从哪些方面进行优化,就需要使用explain来查看select语句的执行计划。...explain关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理SQL语句的,对我们的查询语句进行分析,提升性能。...select_type常用的类型: SIMPLE 简单的select查询,查询中不包含子查询或者UNION PRIMARY 查询中若包含任何复杂的子部分,最外层查询则被标记为PRIMARY...SUBQUERY 在SELECT或WHERE列表中包含了子查询 DERIVED 在FROM列表中包含的子查询被标记为DERIVED(衍生),MySQL会递归执行这些子查询,把结果放在临时表中...如将主键置于where列表中,MySQL就能将该查询转换为一个常量。
在MySQL中,EXPLAIN是一项强大的工具,可帮助开发者深入了解查询语句的执行计划,从而更好地优化查询性能。本文将详细解析MySQL的EXPLAIN关键字,以揭开查询执行计划的面纱。...mysql_explain.jpg 什么是EXPLAIN?...mysql官网文档:https://dev.mysql.com/doc/refman/8.0/en/explain.html EXPLAIN是MySQL提供的一种查询优化工具,通过分析查询语句的执行计划...如何利用EXPLAIN优化查询 查看访问类型 通过type字段了解访问表的方式,避免全表扫描,优先选择索引访问。 检查索引使用情况 确保查询中涉及的字段有适当的索引,避免不必要的索引扫描。...EXPLAIN是MySQL查询优化的得力助手,通过善于利用这一工具,我们能够更好地挖掘MySQL数据库的潜力,为应用程序提供更出色的性能。
Ryeng 译:徐轶韬 MySQL8.0.18刚刚发布,它包含一个全新的功能EXPLAIN ANALYZE,用来分析和理解查询如何执行。 EXPLAIN ANALYZE是什么?...EXPLAIN ANALYZE是一个用于查询的分析工具,它向用户显示MySQL在查询上花费的时间以及原因。它将产生查询计划,并对其进行检测和执行,同时计算行数并度量执行计划中不同点上花费的时间。...这项新功能建立在常规的EXPLAIN基础之上,可以看作是MySQL 8.0之前添加的EXPLAIN FORMAT = TREE的扩展。...EXPLAIN除了输出查询计划和估计成本之外,EXPLAIN ANALYZE还会输出执行计划中各个迭代器的实际成本。 如何使用?...EXPLAIN ANALYZE是MySQL查询分析工具里面的一个新工具: 检查查询计划:EXPLAIN FORMAT = TREE 分析查询执行:EXPLAIN ANALYZE 了解计划选择:Optimizer
额外还有 filtered 列,是一个半分比的值,rows * filtered/100 可以估算出将要和 explain 中前一个表进行连接的行数(前一个表指 explain 中的id值比当前表id值小的表...explain 中的列 接下来我们将展示 explain 中每个列的信息。...MySQL会将结果存放在一个临时表中,也称为派生表(derived的英文含义) 用这个例子来了解 primary、subquery 和 derived 类型 mysql> explain select...4. type列 这一列表示关联类型或访问类型,即MySQL决定如何查找表中的行。...explain 时可能出现 possible_keys 有列,而 key 显示 NULL 的情况,这种情况是因为表中数据不多,mysql认为索引对此查询帮助不大,选择了全表查询。
领取专属 10元无门槛券
手把手带您无忧上云