对于explain extended 查看执行计划里面的一些信息作为一个DBA还是必须掌握的。...--------------+---------+---------+-------+------+----------+-----------------------+ 10*3 (char每个字符在utf...-------------+----------+---------+-------+------+----------+-----------------------+ 10*3 (char每个字符在utf...TIMESTAMP不允许为NULL = 4 日期时间型的key_len计算:(针对mysql5.6.4及之后的版本) DATETIME允许为NULL= 5 + 1(NULL) DATETIME不允许为...补充: 查看test库中的行数量、数据大小、索引大小等统计情况: > SELECTCONCAT(table_schema,'.'
在一张表里有多个索引 , 我们where字段里条件有多个索引的值 , 那么究竟使用的哪个呢?...我们可以使用explain来查看 , 其中的key_len字段可以看得出来 比如下面这条sql explain select * from ent_calendar_diary where email=...是4个字节 列类型 key_len 备注 id int key_len = 4+1 = 5 允许NULL,加1-byte id int not null key_len = 4 不允许NULL user...char(30) utf8 key_len = 30*3+1 允许NULL user varchar(30) not null utf8 key_len = 30*3+2 动态列类型,加2-bytes...BY int类型并且not null 是4个字节 , 因此上面的sql是使用的主键索引 explain select * from ent_calendar_diary where email='xxxx
Mysql中索引长度key_len探索 表结构 mysql> desc emp; +--------------+---------------+------+-----+---------------...--------+------+-----+-------------------+-----------------------------+ 12 rows in set (0.07 sec) 表中的索引...-------+----------+--------+------+------------+---------+---------------+ 6 rows in set (0.08 sec) explain...mysql> explain select * from emp where ename = '张三'; +----+-------------+-------+------------+------...> key_len 到底key_len是怎么计算出来的?
前言我们在设计一个系统的时候,有时候通常为了基础业务,写出的查询sql语句并不高效,从而影响到用户使用系统的整体体验感不是很好,我们通常在系统的测试阶段会开启MySQL中的慢日志查询的功能,可以在MySQL...,在语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,模拟MySQL优化器来执行SQL语句,执行查询时,会返回执行计划的信息,并不执行这条SQL。...,也可以理解成mysql是如何决定查找表中的行,查找数据行的大概范围extra执行计划的重要补充信息,当此列出现Using filesort , Using temporary 字样时就要小心了,很可能...key_len这一列显示了mysql在索引里使用的字节数,通过这个值可以算出具体使用了索引中的哪些列。...通 过结果中的key_len=4可推断出查询使用了第一个列:film_id列来执行索引查找。type对表访问方式,表示MySQL在表中找到所需行的方式,又称“访问类型”。
MySQL里的explain命令内容还是很丰富的,值得好好的挖掘出不少东西来。...explain 生成DML的执行计划 为了进一步的验证,我们选择3个版本,5.5,5.6,5.7来测试。 首先是初始化数据,这个在不同版本是一模一样的方式。 创建一个表test,插入两行数据。...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
语法: EXPLAIN statement>; 输出表格字段如下: mysql> explain select * from mysql.user where user='root...key_length 使用的索引长度 ref ref 哪一列或常数在查询中与索引键列一起使用 rows rows 估计查询的行数 filtered filtered 被条件过滤掉的行数百分比 Extra...None 子查询中第一个SELECT DEPENDENTSUBQUERY dependent (true) 子查询中第一个SELECT,独立于外部查询 DERIVED None 子查询在 FROM子句中...(下面列出部分常见的) Extra Meaning usingwhere 使用过滤条件 usingindex 从索引树中查找所有列 usingtemporary 使用临时表存储结果集,在使用groupby... EXTENDED statement>; 不使用 extended 和使用extended 的分析情况: mysql> explain select tid from
这个比较复杂,目前的理解是合并单表的范围索引扫描(如果成本估算比普通的range要更优的话) unique_subquery 在in子查询中,就是value in (select...)把形如“...d.如单独出现,则是用读索引来代替读行,但不用于查找 all 全表扫描 possible_keys: 指出MySQL能使用哪个索引在表中找到行。...如果改列为NULL,说明该查询不会使用到当前表上的相关索引,考虑是否有必要添加索引 key 显示MySQL在查询中实际使用的索引,若没有使用索引,显示为NULL 也可能存在key不等于...possible_keys的情形,即possible_keys不适合提取所需的行 而查询所选择的列在使用其他索引时更高效 TIPS:查询中若使用了覆盖索引,则该索引仅出现在key列表中...key_len 表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度 ref 表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值 rows 表示MySQL
MySQL中explain的结果字段介绍(二) 昨天说完了执行计划的前四个字段,今天说说后面几个字段吧。...子查询中使用了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...d_key_var3来查询聚集索引列id和联合索引的另外一个列 ALL 这个很好理解,就是走了全表扫描。...这篇内容有点多,其他的字段后续在写吧。
Mysql 中令人稀里糊涂的Explain 本文想和大家来聊聊Mysql中的执行计划,一条SQL语句经过了查询优化器模块分析后,会得到一个执行计划,通过这个执行计划,我们可以知道该条SQL语句具体采用的多表连接顺序是什么...我们可以使用Mysql提供的Explain命令来获取一条SQL语句的具体执行计划,本文的重点在理解Mysql执行计划中各个选项含义。...这两个属性比较好理解,但是注意一点: 在使用index访问方法来查询某个表时,possible_keys列是空的,而key列展示的是实际使用到的索引 注意: possible_keys列中的值并不是越多越好...---- extra Extra列是用来说明一些额外信息的,我们可以通过这些额外信息来更准确的理解MySQL到底将如何执行给定的查询语句。...本文主要参考并摘阅至: 从根上理解Mysql
EXPLAIN为SELECT语句中使用的每个表返回一行信息,它按照MySQL在处理语句时读取表的顺序列出输出中的表。...EXTENDED:执行计划扩展的执行格式 PARTITIONS:在较老的MySQL版本中,分区信息是使用EXPLAIN PARTITIONS生成的。...使用它会导致一个警告,并且在MySQL 8.0中从EXPLAIN语法中删除了它。 FORMAT:执行计划输出格式,默认为TRADITIONAL,以表格的形式输出。...MySQL 在执行计划中输出 key_len 列主要是为了让我们区分某个使用联合索引的查询具体用了几个索引列(联合索引有最左前缀的特性,如果联合索引能全部使用上,则是联合索引字段的索引长度之和,这也可以用来判定联合索引是否部分使用...Extra 顾名思义,Extra 列是用来说明一些额外信息的,我们可以通过这些额外信息来更准确的理解 MySQL 到底将如何执行给定的查询语句。
查看帮助:help explain mysql> help explain Name: 'EXPLAIN' Description: Syntax: {EXPLAIN | DESCRIBE | DESC...| INSERT statement | REPLACE statement | UPDATE statement } The DESCRIBE and EXPLAIN statements...URL: https://dev.mysql.com/doc/refman/5.7/en/explain.html #查看有没有创建索引 mysql> explain select * from test...“Using where” 这意味着mysql服务器将在存储引擎检索行后再进行过滤,许多where条件里涉及索引中的列,当(并且如果)它读取索引时,就能被存储引擎检验...列中索引的位图,并且是冗余的
没错,在sql前面加上explain关键字,就能够看到它的执行计划,通过执行计划,我们可以清楚的看到表和索引执行的情况,索引有没有执行、索引执行顺序和索引的类型等。...explain介绍 先看看mysql的官方文档是怎么描述explain的: ? EXPLAIN可以使用于 SELECT, DELETE, INSERT, REPLACE,和 UPDATE语句。...当EXPLAIN与可解释的语句一起使用时,MySQL将显示来自优化器的有关语句执行计划的信息。也就是说,MySQL解释了它将如何处理该语句,包括有关如何连接表以及以何种顺序连接表的信息。...当EXPLAIN与非可解释的语句一起使用时,它将显示在命名连接中执行的语句的执行计划。 对于SELECT语句, EXPLAIN可以显示的其他执行计划的警告信息。...| DELETE statement | INSERT statement | REPLACE statement | UPDATE statement } 用一条简单的sql看看使用
key 表示MySQL实际选择的索引 key_len 索引使用的字节数。由于存储格式,当字段允许为NULL时,key_len比不允许为空时大1字节。...例如:explain select 1 15 Not exists MySQL能对LEFT JOIN优化,在找到符合LEFT JOIN的行后,不会为上一行组合中检查此表中的更多行。...如果MySQL在t2中找到一个匹配的行,它会知道t2.id永远不会为NULL,并且不会扫描t2中具有相同id值的其余行。...也就是说,对于t1中的每一行,MySQL只需要在t2中只执行一次查找,而不考虑在t2中实际匹配的行数。.../8.0/en/explain-output.html [20] EXPLAIN Statement: https://dev.mysql.com/doc/refman/8.0/en/explain.html
MySQL中explain中的结果字段介绍(三) 之前的文章中对于explain的数据结果中的字段已经进行了一部分介绍了,今天来说一说剩下的几个字段,为了防止忘记,先看看这个表结构: mysql...1个字节 3、对于varchar这种变长字段,需要有额外的2个字节来保存长度 有了这三条规则,就能比较容易理解key_len的值了,例如上面的例子中,key_len的值是4,它的原因是int类型是固定长度...,一个int是4个字节大小 再来看下面这个查询: mysql:yeyztest 21:14:46>>explain select * from test_explain where a_key_var...mysql:yeyztest 21:30:40>>alter table test_explain modify a_key_var varchar(100) not null default '';...ref字段的值都是const,是因为我们使用常量a或者常量2和索引字段进行匹配,如果我们使用某个字段进行匹配,来看下面: mysql:yeyztest 22:24:42>>explain select
今天在处理一个问题的时候,需要根据其他部门提供的sql语句对一个表中的数据进行了筛查。...这个时候我们大体感受到了隐式转换在MySQL中的一些影响,我们来看看在MySQL 5.6和Oracle中的表现如何。...on test(id1); mysql> create index idx_id2 on test(id2); 隐式转换,有数字转换为字符的时候,直接走了索引扫描 mysql> explain select...------------------------------------------------------------------------------------ | 0 | SELECT STATEMENT...和Oracle中的表现是一致的,对于这种隐式转换还是要多加注意。
当EXPLAIN与FOR CONNECTION connection_id而不是可解释语句一起使用时,它将显示在指定连接中执行的语句的执行计划。...EXPLAIN 各返回值作用 为了便于对照,把EXPLAIN的输出,再罗列如下: EXPLAIN 语句输出的各个列的作用如下: 在navicat或mysql命令行输入如下语句: EXPLAIN...在json格式的输出中,这些是access_type属性的值。...在本例中,输出行中的键列包含所使用的索引的列表,key_len包含所使用索引的最长键部分的列表。...3.6. key_len key_len表示索引使用的字节数,根据这个值可以判断索引的使用情况,特别是在组合索引的时候,判断该索引有多少部分被使用到非常重要。
学习mybatis的过程中,测试mapper自动代理的时候一直出错,在eclipse中可以正常运行,而同样的代码在idea中却无法成功。虽然可以继续调试,但心里总是纠结原因。...Hibernate和Spring有时会将配置文件放置在src目录下,编译后要一块打包进classes文件夹,所以存在着需要将xml等资源文件放置在源代码目录下的需求。...解决: 方法1:将xml或properties等配置文件放到resource下,并修改获取配置文件的代码,比如注册mapper.xml的位置等; 方法2:在maven中添加过滤: 1 <!...-- 通过mapper接口加载单个 映射文件 7 遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录 中 8 上边规范的前提是...中 15 上边规范的前提是:使用的是mapper代理方法 16 --> 17 <package name="cn.itcast.mybatis.mapper
文章目录 示例 解释 一条select语句在MySQL中的奇幻之旅 示例 explain select * from emp; 解释 列(Column) 含义(Meaning) id The SELECT...possible_keys The possible indexes to choose(可能使用到的索引) key The index actually chosen(经过优化器评估最终使用的索引) key_len...key:上面写着 rows:这是mysql估算的需要扫描的行数(不是精确值)。这个值非常直观显示 SQL 的效率好坏, 原则上 rows 越少越好。 extra:在大多数情况下会出现以下几种情况。...temporary :查询结果进行排序的时候使用了一张临时表 Using filesort :对数据使用一个外部的索引排序 Using index condition:使用了索引下推 一条select语句在MySQL...中的奇幻之旅 注:MySQL8.0起以取消图中第九步(查询缓存)原因:把查询语句作为key ,将结果作为value 进行缓存,一旦这个表有更新,之前所有的缓存都会被清除掉。
mysql中Explain命令是什么 概念 1、explain用来分析SELECT查询语句,开发人员可以通过分析Explain结果来优化查询语句。...作用 2、通过explain命令我们可以学习到该条SQL是如何执行的,随后解析explain的结果可以帮助我们使用更好的索引,最终来优化它!...通过explain命令我们可以知道以下信息:表的读取顺序,数据读取操作的类型,哪些索引可以使用,哪些索引实际使用了,表之间的引用,每张表有多少行被优化器查询等信息。...实例 explain select * from table_user ; 以上就是mysql中Explain命令的介绍,希望对大家有所帮助。
领取专属 10元无门槛券
手把手带您无忧上云