前言我们在设计一个系统的时候,有时候通常为了基础业务,写出的查询sql语句并不高效,从而影响到用户使用系统的整体体验感不是很好,我们通常在系统的测试阶段会开启MySQL中的慢日志查询的功能,可以在MySQL...=3#慢查询日志以文件的形式输出log_output=FILE基本介绍 Explain被称为执行计划,在语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,模拟MySQL优化器来执行...(注意,如果 from 中包含子查询,仍会执行该子查询,将结果放入临时表中)。Explain结果是基于数据表中现有数据的。...Explain结果与MySQL版本有很大的关系,不同版本的优化器的优化策略不同。...语法:explain sql语句示例:mysql> explain select * from actor;+----+-------------+-------+------+------------
MySQL里的explain命令内容还是很丰富的,值得好好的挖掘出不少东西来。...本身来说explain就是生成执行计划的内容,如果细看,这个内容和Oracle explain plan for的结果相比还是有差距的。...MySQL 5.6 5.6中的结果来看,是支持的,那么最关心的问题,数据会不会变更呢。...MySQL 5.7 在5.7中又做了一些改变,那就是对于DML的支持更加完善了,你可以通过语句的执行计划可以很清晰的看到是哪一种类型的DML(insert,update,delete),当然insert...for connection的新特性 如果对于explain开始有了一些感觉,那么我们再来看一个5.7中的新特性,那就是对connection的解析,也就是explain for connection
MySQL的EXPALIN是优化查询语句必不可少的工具,用户通过它可以获得查询计划的相关信息,查看优化器的选择。...EXPLAIN生成的查询计划中显示优化器计划如何执行查询,包括“SELECT”、“INSERT”、“REPLACE”、“UPDATE”和“DELECE”语句。...`city` where true 1 row in set (0.0004 sec) 之前的例子中,查询使用了索引,让我们再看一个使用全表扫描的例子: MySQL localhost:3350...如果“SELECT”语句中包含UNION或子查询中包含“SELECT”语句,EXPLAIN的输出将包含两行,每行有一个单独的id。...,将从这个表中读取具有匹配索引值的所有行。
MySQL中explain的结果字段介绍(二) 昨天说完了执行计划的前四个字段,今天说说后面几个字段吧。...Const const值就是当我们根据主键或者唯一二级索引列与常数进行等值匹配的时候,对表的访问方法就是const,为了演示效果,我们给表中多插入了几条数据,如下: mysql:yeyztest...,explain中的type字段就是const。...子查询中使用了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 中令人稀里糊涂的Explain 本文想和大家来聊聊Mysql中的执行计划,一条SQL语句经过了查询优化器模块分析后,会得到一个执行计划,通过这个执行计划,我们可以知道该条SQL语句具体采用的多表连接顺序是什么...我们可以使用Mysql提供的Explain命令来获取一条SQL语句的具体执行计划,本文的重点在理解Mysql执行计划中各个选项含义。...查询优化模块属于数据库实现过程中比较困难的一块内容,笔者目前对这块也没有太多研究,但是Explain查询计划又是面试常问的内容,所以本文就不深入查询优化的具体实现,简单和大家唠唠mysql提供的查询计划...这是因为MySQL会在包含GROUP BY子句的查询中默认添加上ORDER BY子句,也就是说上述查询其实和下边这个查询等价: EXPLAIN SELECT common_field, COUNT(*)...---- 小结 本文简单介绍了一下Mysql中Explain执行计划各个属性的含义,通常面试中比较喜欢问着方面问题,如果是个人学习,更推荐先系统学习一下数据库查询优化这块内容相关知识。
MySQL EXPLAIN详解:http://www.jianshu.com/p/ea3fc71fdc45 MySQL EXPLAIN命令是查询性能优化不可缺少的一部分,该文主要讲解explain...key_len 显示mysql在索引里使用的字节数 ref 显示了之前的表在key列记录的索引中查找值所用的列或常量 rows 为了找到所需的行而需要读取的行数,估算值,不精确。...,N指向子查询,也就是explain结果中的下一列 当有union result的时候,表名是union 1,2等的形式,1,2表示参与union的query id 注意:MySQL对待这些表和普通表一样...要想强制MySQL使用或忽视possible_keys列中的索引,在查询中使用FORCE INDEX、USE INDEX或者IGNORE INDEX。...Extra Extra是EXPLAIN输出中另外一个很重要的列,该列显示MySQL在查询过程中的一些详细信息,MySQL查询优化器执行查询的过程中对查询计划的重要补充信息。
MySQL中explain中的结果字段介绍(三) 之前的文章中对于explain的数据结果中的字段已经进行了一部分介绍了,今天来说一说剩下的几个字段,为了防止忘记,先看看这个表结构: mysql...,与条件匹配的值是一个常数还是一个变量之类的,我们可以看到,上面的结果中,ref字段的值都是const,是因为我们使用常量a或者常量2和索引字段进行匹配,如果我们使用某个字段进行匹配,来看下面: mysql...也就是说,比如我们某个表的主键是id,过滤条件是id>4 and age4的记录数预计为40条,也就是explain中的rows的记录为40,那么filter的意思就是在这40条记录里面...,大概有多少比率的记录符合age<30.如下: mysql:yeyztest 22:40:36>>explain select * from test_1 where id>=4 and age<30;...中包含 ORDER BY 操作,而且无法利用索引完成排序操作的时候,MySQL Query Optimizer 不得不选择相应的排序算法来实现。
MySQL Explain详解 简介 执行计划(query Execution plan) 语法 explain select * from table explain 中的列 expain出来的信息有...通常,您可以ALL通过添加基于常量值或早期表中的列值从表中启用行检索的索引来避免 五、possible_keys 该possible_keys列指示MySQL可以选择在此表中查找行的索引,指出MySQL...如果是这样,创造一个适当的索引并且再次用EXPLAIN检查查询 六、Key key列显示MySQL实际决定使用的键(索引) 如果没有选择索引,键是NULL。...要想强制MySQL使用或忽视possible_keys列中的索引,在查询中使用FORCE INDEX、USE INDEX或者IGNORE INDEX。...十、Extra 该Extra列 EXPLAIN输出包含MySQL解决查询的额外信息。
500多万条数据,我explain了一下: explain SELECT * FROM article WHERE (id < 4054495) AND (book_id = '5164') ORDER...基于mysql的查询,更多是注重扫描查询的行数,以及是否使用到索引,我常看的最重要的是扫描的rows字段,然后就key字段,看下extra的属性,这样就基本能解决问题了。...:union之后的结果 dependent unoin:unoin 中的第二个或随后的 select 查询,依赖于外部查询的结果集 dependent subquery:子查询中的第一个 select...(也就是说虽然all和index都是读全表,但index是从索引中读取的,而all是从硬盘中读的)。...using temporary:mysql需要创建一张临时表来保存中间结果。也就是说,需要先把数据放到临时表中,然后从临时表中获取需要的数据。
对于explain extended 查看执行计划里面的一些信息作为一个DBA还是必须掌握的。...(不同字符编码占用的存储空间不同) 3、日期&时间类型的字段长度 DataType Storage Required Before MySQL 5.6.4 Storage Requiredas...TIMESTAMP不允许为NULL = 4 日期时间型的key_len计算:(针对mysql5.6.4及之后的版本) DATETIME允许为NULL= 5 + 1(NULL) DATETIME不允许为...MySQL建立索引时如果没有限制索引的大小,索引长度会默认采用的该字段的长度, 也就是说varchar(20)和varchar(255)对应的索引长度分别为20*3(utf-8)(+2+1),255*3...补充: 查看test库中的行数量、数据大小、索引大小等统计情况: > SELECTCONCAT(table_schema,'.'
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、DEPENDENT
MySQL中explain的结果字段介绍 我们在使用MySQL的时候,用的最多的情况可能就是select语句了,当我们在一个表查找数据的时候,经常会遇到查找的速度比较慢的情况,作为一名DBA,我也会经常遇见业务方写的...而判断一条SQL语句是否会变慢的最主要依据还是"执行计划"。 MySQL中,可以通过explain的语句来查看一个SQL的执行计划。...explain的语法大家可能都清楚,我们看看explain的基本语法和输出内容: mysql 19:49:29>>explain select 1; +----+-------------+------...01 id值 在一个大的select语句中,每一个语句都对应一个id值,例如上面的例子中,这个select 1就对应了一个id值,再来看下面这个SQL: mysql:(none) 21:49:37...,正常来讲,这个表是保存在内存中的),则这个select_type就是subquery,这个我们给出例子: mysql> EXPLAIN SELECT * FROM test2 WHERE id IN
EXPLAIN列的解释: table:显示这一行的数据是关于哪张表的 type:这是重要的列,显示连接使用了何种类型。...很少的情况下,MYSQL会选择优化不足的索引。...将在表4.3中讨论,但这里可以看到的坏的例子是Using temporary和Using filesort,意思MYSQL根本不能使用索引,结果是检索会很慢 extra列返回的描述的意义 Distinct...for each Record(index map:#):没有找到理想的索引,因此对于从前面表中来的每一个行组合,MYSQL检查使用哪个索引,并用它来从表中返回行。...因为只有一行,这个值实际就是常数,因为MYSQL先读这个值然后把它当做常数来对待 eq_ref:在连接中,MYSQL在查询时,从前面的表中,对每一个记录的联合都从表中读取一个记录,它在查询使用了索引为主键或惟一键的全部时使用
MySQL Explain详解 ?...,看到的是derivedx(x是个数字,我的理解是第几步执行的结果) mysql> explain select * from (select * from ( select * from t1 where...如将主键置于where列表中,MySQL就能将该查询转换为一个常量,system是const类型的特例,当查询的表只有一行的情况下,使用system NULL: MySQL在优化过程中分解语句,执行时甚至不用访问表或索引...五、possible_keys 指出MySQL能使用哪个索引在表中找到记录,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用 该列完全独立于EXPLAIN输出所示的表的次序。...如果是这样,创造一个适当的索引并且再次用EXPLAIN检查查询 六、Key key列显示MySQL实际决定使用的键(索引) 如果没有选择索引,键是NULL。
最近分析一段sql 是不是命中索引的,发现有的时候 explain 是可以的,有的时候 又不行 显然我们是要下面的结果。...经过分析,原来是中间件的原因,直连mysql 的可以用 explain 连mycat 就不行。...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引...如将主键置于where列表中,MySQL就能将该查询转换为一个常量,system是const类型的特例,当查询的表只有一行的情况下,使用system NULL: MySQL在优化过程中分解语句,执行时甚至不用访问表或索引...五、possible_keys 指出MySQL能使用哪个索引在表中找到记录,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用 该列完全独立于EXPLAIN输出所示的表的次序。...如果是这样,创造一个适当的索引并且再次用EXPLAIN检查查询 六、Key key列显示MySQL实际决定使用的键(索引) 如果没有选择索引,键是NULL。...• EXPLAIN不考虑各种Cache • EXPLAIN不能显示MySQL在执行查询时所作的优化工作 • 部分统计信息是估算的,并非精确值 • EXPALIN只能解释SELECT操作,其他操作要重写为
我们对系统性能分析的一部分就是数据库的分析,比如定位到查询速度慢的SQL,我们想对其进行优化,但是从哪些方面进行优化,就需要使用explain来查看select语句的执行计划。...explain关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理SQL语句的,对我们的查询语句进行分析,提升性能。...使用expain关键字,我们可以分析到的信息有: 表的读取顺序 数据读取操作的操作类型 哪些索引可以使用 哪些索引被实际使用 表之间的引用 每张表有多少行被优化器查询 使用方法:explain + SQL...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语句后,MySQL将返回一组关于查询执行的信息,其中包括访问表的方式、使用的索引、估计的行数等关键信息。...EXPLAIN是MySQL查询优化的得力助手,通过善于利用这一工具,我们能够更好地挖掘MySQL数据库的潜力,为应用程序提供更出色的性能。
Ryeng 译:徐轶韬 MySQL8.0.18刚刚发布,它包含一个全新的功能EXPLAIN ANALYZE,用来分析和理解查询如何执行。 EXPLAIN ANALYZE是什么?...EXPLAIN ANALYZE是一个用于查询的分析工具,它向用户显示MySQL在查询上花费的时间以及原因。它将产生查询计划,并对其进行检测和执行,同时计算行数并度量执行计划中不同点上花费的时间。...这项新功能建立在常规的EXPLAIN基础之上,可以看作是MySQL 8.0之前添加的EXPLAIN FORMAT = TREE的扩展。...EXPLAIN除了输出查询计划和估计成本之外,EXPLAIN ANALYZE还会输出执行计划中各个迭代器的实际成本。 如何使用?...2005年8月的数据(上面EXPLAIN ANALYZE输出中的第13行)。
额外还有 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元无门槛券
手把手带您无忧上云