首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

谈谈MYSQLExplain

前言我们在设计一个系统时候,有时候通常为了基础业务,写出查询sql语句并不高效,从而影响到用户使用系统整体体验感不是很好,我们通常在系统测试阶段会开启MySQL慢日志查询功能,可以在MySQL...=3#慢查询日志以文件形式输出log_output=FILE基本介绍 Explain被称为执行计划,在语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,模拟MySQL优化器来执行...(注意,如果 from 包含子查询,仍会执行该子查询,将结果放入临时表)。Explain结果是基于数据表现有数据。...Explain结果与MySQL版本有很大关系,不同版本优化器优化策略不同。...语法:explain sql语句示例:mysql> explain select * from actor;+----+-------------+-------+------+------------

25121
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    MySQLexplain结果​字段介绍

    MySQLexplain结果字段介绍(二) 昨天说完了执行计划前四个字段,今天说说后面几个字段吧。...Const const值就是当我们根据主键或者唯一二级索引列与常数进行等值匹配时候,对表访问方法就是const,为了演示效果,我们给表多插入了几条数据,如下: mysql:yeyztest...,explaintype字段就是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

    8.5K10

    Mysql 令人稀里糊涂Explain

    Mysql 令人稀里糊涂Explain 本文想和大家来聊聊Mysql执行计划,一条SQL语句经过了查询优化器模块分析后,会得到一个执行计划,通过这个执行计划,我们可以知道该条SQL语句具体采用多表连接顺序是什么...我们可以使用Mysql提供Explain命令来获取一条SQL语句具体执行计划,本文重点在理解Mysql执行计划各个选项含义。...查询优化模块属于数据库实现过程中比较困难一块内容,笔者目前对这块也没有太多研究,但是Explain查询计划又是面试常问内容,所以本文就不深入查询优化具体实现,简单和大家唠唠mysql提供查询计划...这是因为MySQL会在包含GROUP BY子句查询默认添加上ORDER BY子句,也就是说上述查询其实和下边这个查询等价: EXPLAIN SELECT common_field, COUNT(*)...---- 小结 本文简单介绍了一下MysqlExplain执行计划各个属性含义,通常面试中比较喜欢问着方面问题,如果是个人学习,更推荐先系统学习一下数据库查询优化这块内容相关知识。

    28950

    mysql explain ref列_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表示参与unionquery id 注意:MySQL对待这些表和普通表一样...要想强制MySQL使用或忽视possible_keys列索引,在查询中使用FORCE INDEX、USE INDEX或者IGNORE INDEX。...Extra Extra是EXPLAIN输出另外一个很重要列,该列显示MySQL在查询过程一些详细信息,MySQL查询优化器执行查询过程对查询计划重要补充信息。

    3.7K60

    MySQLexplain结果字段介绍(三)

    MySQLexplain结果字段介绍(三) 之前文章对于explain数据结果字段已经进行了一部分介绍了,今天来说一说剩下几个字段,为了防止忘记,先看看这个表结构: mysql...,与条件匹配值是一个常数还是一个变量之类,我们可以看到,上面的结果,ref字段值都是const,是因为我们使用常量a或者常量2和索引字段进行匹配,如果我们使用某个字段进行匹配,来看下面: mysql...也就是说,比如我们某个表主键是id,过滤条件是id>4 and age4记录数预计为40条,也就是explainrows记录为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 不得不选择相应排序算法来实现。

    2.1K10

    mysql explain ref null_MySQL Explain详解

    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解决查询额外信息。

    1.8K40

    mysqlexplain详解

    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需要创建一张临时表来保存中间结果。也就是说,需要先把数据放到临时表,然后从临时表获取需要数据。

    39130

    MySQL EXPLAIN 使用

    EXPLAIN解释: table:显示这一行数据是关于哪张表 type:这是重要列,显示连接使用了何种类型。...很少情况下,MYSQL会选择优化不足索引。...将在表4.3讨论,但这里可以看到例子是Using temporary和Using filesort,意思MYSQL根本不能使用索引,结果是检索会很慢 extra列返回描述意义 Distinct...for each Record(index map:#):没有找到理想索引,因此对于从前面表每一个行组合,MYSQL检查使用哪个索引,并用它来从表返回行。...因为只有一行,这个值实际就是常数,因为MYSQL先读这个值然后把它当做常数来对待 eq_ref:在连接MYSQL在查询时,从前面的表,对每一个记录联合都从表读取一个记录,它在查询使用了索引为主键或惟一键全部时使用

    49010

    MySQLexplain结果字段介绍(1)

    MySQLexplain结果字段介绍 我们在使用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

    2.8K20

    MYSQL EXPLAIN KEY_LEN说明

    对于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,'.'

    1.4K20

    Mysql Explain 详解

    在日常工作,我们会有时会开慢查询去记录一些执行时间比较久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操作,其他操作要重写为

    1.1K20

    MySQL Explain详解

    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。

    1.1K10

    MySQL explain extra

    MySQL执行计划,extra可以展示执行一些细节,比如索引下推,覆盖索引,排序等信息,为索引优化提供了更完整信息 常见extra extra有很多,这里只列出了最常见几种类型 Using...where: 查询条件 Using index condition: 索引下推(Index Condition Pushdown) Using filesort:Server层需要做额外排序操作...,需要优化,让排序使用到索引 no matching row in const table:唯一索引(包括主键)查询不到数据 Using index:覆盖索引,查询行都在对应索引 Using...因为接近索引,可能在相同页上 Using temporary:使用了临时表,需要优化 疑问 条件只有一个条件,是索引第一个字段,也可能Using index condition,这个就太不明白了.../doc/refman/8.0/en/explain-output.html#explain-extra-information Mysql-explain之Using temporary和Using

    70230

    MySQL EXPLAIN详解

    相关文章: MySQL高性能表设计规范:http://www.jianshu.com/p/f797bbe11d76 MySQL EXPLAIN详解:http://www.jianshu.com/p/ea3fc71fdc45...image.png MySQL EXPLAIN命令是查询性能优化不可缺少一部分,该文主要讲解explain命令使用及相关参数说明。...key_len 显示mysql在索引里使用字节数 ref 显示了之前表在key列记录索引查找值所用列或常量 rows 为了找到所需行而需要读取行数,估算值,不精确。...形式,N指向子查询,也就是explain结果下一列 当有union result时候,表名是union 1,2等形式,1,2表示参与unionquery id 注意:MySQL对待这些表和普通表一样...Extra Extra是EXPLAIN输出另外一个很重要列,该列显示MySQL在查询过程一些详细信息,MySQL查询优化器执行查询过程对查询计划重要补充信息。

    1.3K90

    mysql explain详解

    对于经常使用mysql兄弟们,对explain一定不会陌生。当你在一条SELECT语句前放上关键词EXPLAINMySQL解释它将如何处理SELECT,提供有关表如何联合和以什么次序信息。...官方关于explain文档在http://dev.mysql.com/doc/refman/5.1/en/using-explain.html(英文),本文可作为官方文献不完整通俗读物。...rows 这个数表示mysql要遍历多少数据才能找到,在innodb上是不准确。 Extra 如果是Only index,这意味着信息只用索引树信息检索出,这比扫描整个表要快。...Using index 从只使用索引树信息而不需要进一步搜索读取实际行来检索表列信息。 Using temporary 为了解决查询,MySQL需要创建一个临时表来容纳结果。...ref 对于每个来自于前面的表行组合,所有有匹配索引值行将从这张表读取 ALL 完全没有索引情况,性能非常地差劲。 index 与ALL相同,除了只有索引树被扫描。

    785100

    MySQL - EXPLAIN详解

    概述 EXPLAIN: 为 SELECT语句中使用到每个表返回一条信息。它按照MySQL在处理语句时读取它们顺序列出这些表。MySQL使用循环嵌套算法解析所有连接。...意味着MySQL从第一个表读取一行,然后在第二个表,第三个表中找到匹配行,等等。...QEP: SQL语句查询执行计划 注意: 在以前版本MySQL,使用 EXPLAIN PARTITIONS 与 EXPLAIN EXTENDED 来生成分区和扩展信息 。...目前为止这些语法仍然是向后兼容,但未来 MySQL会将它们排除出 EXPLAIN语法,因为现在 EXPLAIN默认就会输出分区和扩展相关信息。...(5.7才有) possiblekeys(JSON名: possiblekeys) 表示MySQL查找表行时可选择索引。请注意,此列完全独立于 EXPLAIN输出显示顺序。

    1.3K21
    领券