explain的使用

使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析你的查询语句或是结构的性能瓶颈。在select语句之前增加explain关键字,Mysql会在查询上设置一个标记,执行查询会返回执行计划的信息,并不会执行这条SQL,就比如下面这个

SQL语句性能统计指标:

id: select语句标识符
select_type:select语句查询类型
table: 查询用到的表
partitions: 查询匹配到的分区
type:表连接类型
possible_keys:可能用到的索引
key:时间用到的索引
key_len:索引长度
ref:查询条件中的列
rows:预计扫描的行数
filtered:过滤行所占的百分比
Extra:附加信息

explain字段详解

id列

id表示查询语句的序号,自动分配,顺序递增,值越大,执行优先级越高 id相同是,优先级由上而下

select_type列

select_type表示查询类型,常见的有SIMPLE简单查询,PRIMARY主查询,SUBQUERY子查询、UNION联合查询、UNION RESULT联合临时表结果等。

table列

table表示SQL语句查询的表名、表别名、临时表名。

partitions列

partitions表示SQL查询匹配到的分区。没有分区的话显示NULL

type列

type表示表连接类型或者数据访问类型,就是表之间通过什么方式建立连接的,或者通过什么方式访问到数据的。具体有以下值,性能由好到差依次是:

system>const>eq_ref>ref>ref_or_null>index_merge>range>index>ALL

system:当表中只有一行记录,也就是系统表,是const类型的特例

const:表示使用主键或者唯一性索引进行等值查询,最多返回一条记录,性能较好,推荐使用。

eq_ref:表示表连接只有到了主键或者唯一性索引

ref:表示使用非唯一性索引进行等值查询

ref_of_null:表好似使用非唯一性索引进行等值查询,并且包含了null值的行

index_merge:表示用到索引合并的优化逻辑,即用到的多个索引

range:表示用到了索引范围查询

index:表示使用索引进行全表扫描

ALL:表示全表扫描,性能最差

possible_keys列

表示可能用到的索引列,实际查询并不一定能用到。

key列

表示实际查询用到的索引列

key_len列

表示索引所占的字节数。每种类型所占的字节数如下:

ref列

表示where语句或者表连接中与索引比较的参数,常见的有const(常量)、func(函数)、字段名。如果没用到索引,则显示为NULL

rows列

表示执行SQL语句所扫描的行数

filtered列

表示按条件过滤的表行的百分比 用来估算与其他表连接是扫描的行数,row x filtered=252004 x 10% =25万行

Extra列

表示一些额外的扩展信息,不适合在其他列展示,却又十分重要

Using wher:表示使用了wher条件搜索,但没有使用索引

Using index:表示用到了覆盖索引,即在索引上就查到了所需数据,无需二次回表查询,性能较好

Using filesort:表示使用了外部排序,及排序字段没有用到索引

Using filesort:表示使用了外部排序,即排序字段灭有用到索引

Using temporary:表示用到了临时表

Using join buffer:表示在进行表关联的时候,没用用到索引,使用了连接缓存去存储临时结果。

Using index condition :表示用到索引下推的优化特性

mysql explain 优化的更多相关文章

  1. mysql explain优化

    简介 MySQL 提供了一个 EXPLAIN 命令, 它可以对 SELECT 语句进行分析, 并输出 SELECT 执行的详细信息, 以供开发人员针对性优化.EXPLAIN 命令用法十分简单, 在 S ...

  2. 【MySQL】优化—工欲善其事,必先利其器之EXPLAIN

    接触MySQL已经有一段时间了,了解如何优化它也迫在眉睫了,话说工欲善其事,必先利其器.最近我就打算了解下几个优化MySQL中经常用到的工具.今天就简单介绍下EXPLAIN. 环境准备 Explain ...

  3. 小白学习mysql之优化基础(EXPLAIN的连接类型)

    ## 导语很多情况下,有很多人用各种select语句查询到了他们想要的数据后,往往便以为工作圆满结束了.这些事情往往发生在一些学生亦或刚入职场但之前又没有很好数据库基础的小白身上,但所谓闻道有先后,只 ...

  4. mysql优化 mysql explain

    一篇文章: 使用use index优化sql查询   先看一下arena_match_index的表结构,大家注意表的索引结构CREATE TABLE `arena_match_index` (  ` ...

  5. MySQL 性能优化神器 Explain 使用分析

    简介 MySQL 提供了一个 EXPLAIN 命令, 它可以对 SELECT 语句进行分析, 并输出 SELECT 执行的详细信息, 以供开发人员针对性优化. EXPLAIN 命令用法十分简单, 在 ...

  6. mysql基础优化-explain的使用-mysql死锁

    MySQL的优化 主要包括三个方面,首先是SQL语句的优化,其次是表结构的优化(这里主要指索引的优化),最后是服务器配置的优化. 一.SQL语句的优化 在 where 及 order by 涉及的列上 ...

  7. python mysql索引 优化神器explain 慢查询

    ##############总结########## 数据库中专门帮助用户快速找到数据的一种数据结构 类似于字典的目录的索引 索引的作用:约束和加速查找 工作原理: b+树形结构 最上层是树根,中间是 ...

  8. mysql性能优化-慢查询分析、优化索引和配置 (慢查询日志,explain,profile)

    mysql性能优化-慢查询分析.优化索引和配置 (慢查询日志,explain,profile) 一.优化概述 二.查询与索引优化分析 1性能瓶颈定位 Show命令 慢查询日志 explain分析查询 ...

  9. MySQL性能优化神器Explain

    本文涉及:MySQL性能优化神器Explain的使用 简介 虽然使用Explain不能够马上调优我们的SQL,它也不能给予我们一些调整建议,但是它能够让我们了解MySQL 优化器是如何执行SQL 语句 ...

  10. MySql 性能优化之 Explain

    MySQL 之 Explain 输出分析 背景 前面的文章写过 MySQL 的事务和锁,这篇文章我们来聊聊 MySQL 的 Explain,估计大家在工作或者面试中多多少少都会接触过这个.可能工作中实 ...

随机推荐

  1. oracle学习之undo读一致性及undo表空间设置大小

    1.一致性读和事务 一个事务开始以后,分配undo段头事务表和undo块,事务表指向undo块,数据块中有事务槽,底下有数据行,数据块事务槽中事务ID指向事务表,事务表指向undo块,数据块事务槽也指 ...

  2. python的GIL全局解释器锁

    global interpreter lock -- 全局解释器锁 CPython 解释器所采用的一种机制,它确保同一时刻只有一个线程在执行 Python bytecode.此机制通过设置对象模型(包 ...

  3. nginx转发端口路由器再转发

    场景 nginx 转发端口 路由器二次转发了,端口不一样 (shiro 或者其他一些权限控制架构会自动跳转,导致的端口不对.) proxy_set_header Host $host:$proxy_p ...

  4. 如何理解JavaScript中常用的4种排序算法?

      如何理解JavaScript中常用的4种排序算法? 冒泡排序 冒泡排序是我们在编程算法中,算是比较常用的排序算法之一,在学习阶段,也是最需要接触理解的算法,所以我们放在第一个来学习. 算法介绍: ...

  5. clickhouse 重启,软连接失效,增加存储路径

    1. 启动停止命令 systemctl start clickhouse-server systemctl stop clickhouse-server systemctl status clickh ...

  6. 动态修改网页的 icon 和 title

    在public的index.html中使用 link 和 title 占位(内容随意,获取到数据之后此处的内容会被覆盖) 在App.vue中调用接口获取数据,找到 link 和 title 元素,将获 ...

  7. unity shader ide

    Shader Languages support for vs Code https://marketplace.visualstudio.com/items?itemName=slevesque.s ...

  8. 理解cpu过高的逻辑思维与分析方法

    工作经常碰到负载过高,cpu占有太高,系统变慢,运维通常做的第一件事就是通过top或者uptime命令来了解系统负载的情况 通常uptime后会出现三个小数,就是平均负载值,那真正的了解这个平均负载值 ...

  9. .Net Standard .Net Framework .Net Core 版本对应

  10. 如何把接口返回文件流读取后写入Excel

    代码: res = res.content #接口返回的内容 with open(path,mode='wb') as file: #excel的路径 file.write(res)