Explain各个字段的含义


文章目录

    • @[TOC]
    • 1:expanin的结果示例
    • 2:各个字段的含义
      • (1):id
      • (2):select_type
      • (3):table
      • (4):type(重要 我们利用索引查找出来的记录显示)
      • (5): possible_keys
      • (6):key
      • (7):key_len
      • (8):ref
      • (8):rows(重要)
      • (9):extra

1:expanin的结果示例

mysql> explain select * from staff;
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
|  1 | SIMPLE      | staff | ALL  | NULL          | NULL | NULL    | NULL |    2 | NULL  |
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
1 row in set

在这里插入图片描述

2:各个字段的含义

(1):id

SQL查询中的序列号
id列数字越大越先执行,如果说数字一样大,那么就从上往下依次执行。

(2):select_type

在这里插入图片描述

(3):table

查询的表名。不一定是实际存在的表名。

(4):type(重要 我们利用索引查找出来的记录显示)

这是最重要的字段之一,显示查询使用了何种类型。从最好到最差的连接类型依次为:

system,const,eq_ref,ref,fulltext,ref_or_null,index_merge,unique_subquery,index_subquery,range,indexALL

除了all之外,其他的type都可以使用到索引,除了index_merge之外,其他的type只可以用到一个索引。

  • system:
    表中只有一行数据或者是空表,这是const类型的一个特例。且只能用于myisam和memory表。如果是Innodb引擎表,type列在这个情况通常都是all或者index
  • const
    最多只有一行记录匹配。当联合主键或唯一索引的所有字段跟常量值比较时,join类型为const。其他数据库也叫做唯一索引扫描
  • eq_ref
    多表join时,对于来自前面表的每一行,在当前表中只能找到一行。这可能是除了system和const之外最好的类型。当主键或唯一非NULL索引的所有字段都被用作join联接时会使用此类型。
    eq_ref可用于使用’='操作符作比较的索引列。比较的值可以是常量,也可以是使用在此表之前读取的表的列的表达式。
    相对于下面的ref区别就是它使用的唯一索引,即主键或唯一索引,而ref使用的是非唯一索引或者普通索引。eq_ref只能找到一行,而ref能找到多行。
  • ref
    对于来自前面表的每一行,在此表的索引中可以匹配到多行。若联接只用到索引的最左前缀或索引不是主键或唯一索引时,使用ref类型(也就是说,此联接能够匹配多行记录)。
    ref可用于使用’=‘或’<=>'操作符作比较的索引列。
  • fulltext
    使用全文索引的时候是这个类型。要注意,全文索引的优先级很高,若全文索引和普通索引同时存在时,mysql不管代价,优先选择使用全文索引。
  • index_merge
    表示查询使用了两个以上的索引,最后取交集或者并集,常见and ,or的条件使用了不同的索引,官方排序这个在ref_or_null之后,但是实际上由于要读取多个索引,性能可能大部分时间都不如range
  • unique_subquery
    用于where中的in形式子查询,子查询返回不重复值唯一值,可以完全替换子查询,效率更高。
    该类型替换了下面形式的IN子查询的ref:
    value IN (SELECT primary_key FROM single_table WHERE some_expr)
  • index_subquery
    该联接类型类似于unique_subquery。适用于非唯一索引,可以返回重复值。
  • range
    索引范围查询,常见于使用 =, <>, >, >=, <, <=, IS NULL, <=>, BETWEEN, IN()或者like等运算符的查询中。
SELECT * FROM tbl_nameWHERE key_column BETWEEN 10 and 20;SELECT * FROM tbl_nameWHERE key_column IN (10,20,30);
  • index
    索引全表扫描,把索引从头到尾扫一遍。这里包含两种情况:
    一种是查询使用了覆盖索引,那么它只需要扫描索引就可以获得数据,这个效率要比全表扫描要快,因为索引通常比数据表小,而且还能避免二次查询,在extra中显示Using index,反之,如果在索引上进行全表扫描,没有Using index的提示。
# 此表见有一个name列索引。
# 因为查询的列name上建有索引,所以如果这样type走的是index
mysql> explain select name from testa;
+----+-------------+-------+-------+---------------+----------+---------+------+------+-------------+
| id | select_type | table | type  | possible_keys | key      | key_len | ref  | rows | Extra       |
+----+-------------+-------+-------+---------------+----------+---------+------+------+-------------+
|  1 | SIMPLE      | testa | index | NULL          | idx_name | 33      | NULL |    2 | Using index |
+----+-------------+-------+-------+---------------+----------+---------+------+------+-------------+
  • all
    全表扫描 性能最差

(5): possible_keys

查询可能使用到的索引都会在这里列出来

(6):key

查询真正使用到的索引。
select_type为index_merge时,这里可能出现两个以上的索引,其他的select_type这里只会出现一个。

(7):key_len

查询用到的索引长度(字节数)。
如果是单列索引,那就整个索引长度算进去,如果是多列索引,那么查询不一定都能使用到所有的列,用多少算多少。留意下这个列的值,算一下你的多列索引总长度就知道有没有使用到所有的列了。(比如我们建索引的列的修饰符无 int 那么我们 就可以判断其为4)

(8):ref

如果是使用的常数等值查询,这里会显示const,如果是连接查询,被驱动表的执行计划这里会显示驱动表的关联字段,如果是条件使用了表达式或者函数,或者条件列发生了内部隐式转换,这里可能显示为func

(8):rows(重要)

rows 也是一个重要的字段。 这是mysql估算的需要扫描的行数(不是精确值)。
这个值非常直观显示 SQL 的效率好坏, 原则上 rows 越少越好.

(9):extra

  • distinct:在select部分使用了distinc关键字
  • Using filesort:当 Extra 中有 Using filesort 时, 表示 MySQL 需额外的排序操作, 不能通过索引顺序达到排序效果. 一般有 Using filesort, 都建议优化去掉, 因为这样的查询 CPU 资源消耗大.
  • Using index:“覆盖索引扫描”, 表示查询在索引树中就可查找所需数据, 不用扫描表数据文件, 往往说明性能不错.
  • Using temporary
    查询有使用临时表, 一般出现于排序, 分组和多表 join 的情况, 查询效率不高, 建议优化.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/307258.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

asp.net core监控—引入Prometheus(三)

上一篇博文中说到Prometheus有四种指标类型&#xff1a;Counter&#xff08;计数器&#xff09;、Gauge&#xff08;仪表盘&#xff09;、Histogram&#xff08;直方图&#xff09;、Summary&#xff08;摘要&#xff09;&#xff0c;并且我们做了一个Counter的Demo&#xff0c…

秋招日常(一天三封感谢信)

就离谱 上午收到两封 搞得复习贼没心态 下午打完球回来一看手机又收到一封 这个有点伤 自己测评完 笔试 笔试完 约面 技术面过了 hr又面 面完说等消息 我寻思hr面能有啥可挂的 就离谱 一想到自己经过那么多轮 还是挂了 就难受 什么鬼 求求了 给个offer吧 要不我快成了天天向下的…

asp.net core监控—引入Prometheus(一)

Prometheus是CNCF毕业的第二个项目&#xff0c;算是明星产品&#xff08;可自行了解Prometheus的功能&#xff09;&#xff0c;asp.net core当然不能错过与之配套使用。在.net中是通过prometheus.net【https://github.com/prometheus-net/prometheus-net】引入的。上图是用Prom…

1024福利 | .NET社区联合清华大学出版社送好书来啦!

话不多说&#xff0c;直入主题。.NET社区各大公众号联合清华大学出版社为粉丝送上1024的福利&#xff0c;还请诸位笑纳&#xff01;&#xff01;&#xff01;有哪些书呢&#xff1f;.NET并发编程实战 作者&#xff1a;[美] 里卡尔多特雷尔&#xff08;Riccardo Terrell&#xf…

asp.net core监控—引入Prometheus(二)

上一篇博文中&#xff0c;说明了怎么引进Prometheus到asp.net core项目中&#xff0c;因为是Demo&#xff0c;所以Prometheus和Grafana都是windows版本&#xff0c;本地执行的&#xff0c;生产环境上这些服务可以根据的公司的架构&#xff0c;放到适合的环境内&#xff0c;现在…

ASP.NET Core Blazor Webassembly 之 渐进式应用(PWA)

Blazor支持渐进式应用开发也就是PWA。使用PWA模式可以使得web应用有原生应用般的体验。什么是PWAPWA应用是指那些使用指定技术和标准模式来开发的web应用&#xff0c;这将同时赋予它们web应用和原生应用的特性。例如&#xff0c;web应用更加易于发现——相比于安装应用&#xf…

TCP三次握手(详解)

一&#xff1a;引出 客户端与服务器之间数据的发送和返回的过程当中需要创建一个叫TCP connection的东西&#xff1b;由于TCP不存在连接的概念&#xff0c;只存在请求和响应&#xff0c;请求和响应都是数据包&#xff0c;它们之间都是经过由TCP创建的一个从客户端发起&#xf…

进击吧! Blazor !第五期 安全

Blazor 是一个 Web UI 框架&#xff0c;可通过 WebAssembly 在任意浏览器中运行 .Net 。Blazor 旨在简化快速的单页面 .Net 浏览器应用的构建过程&#xff0c;它虽然使用了诸如 CSS 和 HTML 之类的 Web 技术&#xff0c;但它使用 C&#xff03;语言和 Razor 语法代替 JavaScrip…

有一种无耻叫 “我是为你着想”

这是头哥侃码的第221篇原创十一之后&#xff0c;我的状态一直不好&#xff0c;总感觉胸口有东西堵着&#xff0c;时不时还会觉得呼吸困难。上周末&#xff0c;我咨询了几位有医学背景的朋友&#xff0c;有说是因为季节转换而造成的身体不适&#xff0c;不用在意&#xff0c;但也…

asp.net core监控—引入Prometheus(四)

上一篇博文中说到Prometheus有四种指标类型&#xff1a;Counter&#xff08;计数器&#xff09;、Gauge&#xff08;仪表盘&#xff09;、Histogram&#xff08;直方图&#xff09;、Summary&#xff08;摘要&#xff09;&#xff0c;并且我们做了一个Counter的Demo&#xff0c…

[开源] .Net ORM FreeSql 1.10.0 稳步向前

写在开头FreeSql 是 .NET 开源生态下的 ORM 轮子&#xff0c;转眼快两年了&#xff0c;说真的开源不容易&#xff08;只有经历过才明白&#xff09;。今天带点干货和湿货给大家&#xff0c;先说下湿货。认识我的人&#xff0c;知道 CSRedisCore 是我写的另外一个开源组件&#…

CAP-微服务间通信实践

微服务间通信常见的两种方式由于微服务架构慢慢被更多人使用后&#xff0c;迎面而来的问题是如何做好微服务间通信的方案。我们先分析下目前最常用的两种服务间通信方案。gRPC&#xff08;rpc远程调用&#xff09;gRPC-微服务间通信实践场景&#xff1a;A服务主动发起请求到B服…

软件构造学习笔记-第二周

本周课程把第六章测试的内容提前讲了一部分&#xff0c;主要为实验1服务&#xff0c;讲了有关测试的概念、作用和基本方法。“测试优先”的思想是非常重要的&#xff0c;根据spec写出简单而全面的测试&#xff0c;在方法/类完成后第一时间对其进行测试&#xff0c;保证每个方法…

T-SQL | 你需要了解的执行计划

【T-SQL】| 作者 / Edison Zhou这是EdisonTalk的第297篇学习分享T-SQL是ANSI和ISO SQL标准的MS SQL扩展&#xff0c;其正式名称为Transact-SQL&#xff0c;但一般程序员都称其为T-SQL。本文是我学习《T-SQL查询》一书的读书笔记&#xff0c;为你讲解执行计划是个什么鬼。1关于执…

软件构造学习笔记-实验1

记录一下做实验1时遇到的问题。 准备工作 1.GitHub的注册和配置 由于之前没有接触过GitHub&#xff0c;所以碰到了一些问题。GitHub是什么&#xff1f;怎么建立GitHub远程仓库与本地仓库的连接&#xff1f;怎么在GitHub上传和下载文件&#xff1f; 实验完成后我可以简单回答上…

好的自我介绍,面试成功一大半

大家好&#xff0c;我是Z哥。关于面试时的自我介绍&#xff0c;我想大家遇到的情况都差不多&#xff0c;大部分面试的第一个环节基本都是这个。每个人也都知道留下好的第一印象很重要&#xff0c;但我估计很多人对这件事的解决方式&#xff0c;也就在网上找个自我介绍的模版就完…

软件构造学习笔记-第三周

本周介绍了软件开发的几种模型&#xff0c;并重点介绍了Git。Git是分布式版本控制系统&#xff0c;可以通过SSH key建立远程与本地的连接&#xff0c;通过Git Bash中的命令进行文件的上传和下载。对于这门课程&#xff0c;Git的主要作用就是向TA提交实验代码。 软件开发生命周…

log4net直切ElasticSearch,小步快跑首选

很多小步快跑的公司&#xff0c;开发人员可能就3-4个&#xff0c;面对巨大业务压力&#xff0c;日连夜的赶着上线&#xff0c;快速试错&#xff0c;自然就没时间搭建一些基础设施&#xff0c;比如说logCenter&#xff0c;但初期项目不稳定&#xff0c;bug又多&#xff0c;每次都…

软件构造学习笔记-第四周

本周重点介绍了mutable和immutable的概念&#xff0c;有些抽象。对于immutable的数据类型来说&#xff0c;想修改其引用指向的值&#xff0c;必须使其指向新的内存区域&#xff0c;而不能在原有的内存区域做修改。mutable数据类型相反&#xff0c;可以在原来指向的内存区域进行…

壹佰文章总结| 关于ASP.NETCore的分享之路

公众号不让放外网链接&#xff0c;点击【阅读原文】&#xff0c;去我的博客园&#xff0c;可以看对应的详细文章。&#xff08;关于学习ASP.NET Core需要了解和掌握的知识点图&#xff09;一言不合就来图&#xff0c;各位博客园小伙伴大家好&#xff0c;感觉好久没有写文章了&a…