首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    谈谈MYSQL中的Explain

    前言我们在设计一个系统的时候,有时候通常为了基础业务,写出的查询sql语句并不高效,从而影响到用户使用系统的整体体验感不是很好,我们通常在系统的测试阶段会开启MySQL中的慢日志查询的功能,可以在MySQL...,在语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,模拟MySQL优化器来执行SQL语句,执行查询时,会返回执行计划的信息,并不执行这条SQL。...,也可以理解成mysql是如何决定查找表中的行,查找数据行的大概范围extra执行计划的重要补充信息,当此列出现Using filesort , Using temporary 字样时就要小心了,很可能...key_len这一列显示了mysql在索引里使用的字节数,通过这个值可以算出具体使用了索引中的哪些列。...通 过结果中的key_len=4可推断出查询使用了第一个列:film_id列来执行索引查找。type对表访问方式,表示MySQL在表中找到所需行的方式,又称“访问类型”。

    26521

    MySQL中explain的几点用法

    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

    1.7K70

    mysql执行计划看是否最优

    语法: 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

    87120

    MySQL EXPLAIN SQL 输出信息描述

    这个比较复杂,目前的理解是合并单表的范围索引扫描(如果成本估算比普通的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

    1K20

    mysql执行计划看是否最优

    语法: 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

    2.1K101

    Mysql 中令人稀里糊涂的Explain

    Mysql 中令人稀里糊涂的Explain 本文想和大家来聊聊Mysql中的执行计划,一条SQL语句经过了查询优化器模块分析后,会得到一个执行计划,通过这个执行计划,我们可以知道该条SQL语句具体采用的多表连接顺序是什么...我们可以使用Mysql提供的Explain命令来获取一条SQL语句的具体执行计划,本文的重点在理解Mysql执行计划中各个选项含义。...这两个属性比较好理解,但是注意一点: 在使用index访问方法来查询某个表时,possible_keys列是空的,而key列展示的是实际使用到的索引 注意: possible_keys列中的值并不是越多越好...---- extra Extra列是用来说明一些额外信息的,我们可以通过这些额外信息来更准确的理解MySQL到底将如何执行给定的查询语句。...本文主要参考并摘阅至: 从根上理解Mysql

    33750

    【MySQL系列】- MySQL执行计划一览

    EXPLAIN为SELECT语句中使用的每个表返回一行信息,它按照MySQL在处理语句时读取表的顺序列出输出中的表。...EXTENDED:执行计划扩展的执行格式 PARTITIONS:在较老的MySQL版本中,分区信息是使用EXPLAIN PARTITIONS生成的。...使用它会导致一个警告,并且在MySQL 8.0中从EXPLAIN语法中删除了它。 FORMAT:执行计划输出格式,默认为TRADITIONAL,以表格的形式输出。...MySQL 在执行计划中输出 key_len 列主要是为了让我们区分某个使用联合索引的查询具体用了几个索引列(联合索引有最左前缀的特性,如果联合索引能全部使用上,则是联合索引字段的索引长度之和,这也可以用来判定联合索引是否部分使用...Extra 顾名思义,Extra 列是用来说明一些额外信息的,我们可以通过这些额外信息来更准确的理解 MySQL 到底将如何执行给定的查询语句。

    76420

    explain | 索引优化的这把绝世好剑,你真的会用吗?

    没错,在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看看使用

    1.8K31

    MySQL中explain中的结果字段介绍(三)

    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

    2.1K10

    Mybatis在idea中错误:Invalid bound statement (not found)

    学习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

    2.2K70

    【MySQL】执行计划 explain 及 一条select语句在MySQL中的奇幻之旅

    文章目录 示例 解释 一条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 进行缓存,一旦这个表有更新,之前所有的缓存都会被清除掉。

    1.2K20
    领券