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. 1.PS基本操作

    1.图片颜色变淡 1.新建一个白色的画板 什么尺寸都可以 只要能装得下你这张图 2.把这张图拖进去放到画板上 3.在右边找到这张图的图层 更改透明度到你觉得合适的程度 (我初步估计可能20%左右吧)

  2. RepOpt-VGG:梯度参数化的开创

    ​ 本文来自公众号"AI大道理" ​ YOLov6的量化问题: yolov6在结构中大量使用了重参数结构,导致数据分布过差,PTQ精度急剧下降.另外,重参数化结构网络无法直接使用Q ...

  3. 从各种点理解Unity中的协程

    这个写的很好,https://zhuanlan.zhihu.com/p/59619632

  4. Go实现KMP和Sunday算法

    KMP 1 func KMP(str, substr string) int { 2 if substr == "" { 3 return 0 4 } 5 strLen := le ...

  5. sublime 设置快捷键

    Tools-> Developer-> New Snippet 打开后保存文件要是以 .sublime-snippet 做结尾 <snippet> <content> ...

  6. 记下HTML中图片的路径

    1 <!doctype html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 < ...

  7. Jmeter(三十九) - 从入门到精通进阶篇 - Jmeter配置文件的刨根问底 - 上篇(详解教程)

    ------------------------------------------------------------------- 转载自:北京-宏哥 https://www.cnblogs.co ...

  8. spring缓存创建

    /** * * <b>创建缓存</b> * <p> * 创建缓存,若已存在直接返回. * <p> * @param cacheName * @retur ...

  9. 【10】python之条件判断

    Python 条件语句是通过一条或多条语句的执行结果(True 或者 False)来决定执行的代码块. Python中没有switch – case语句,也没有三元运算符. 1.if 语句 Pytho ...

  10. video.js 苹果手机设置了currentTime却还是从头播放?

    最近在项目(方案大赛)中需要保存学习进度,用户再打开页面时会从上次的视频进度继续观看.我们使用了video.js,在PC浏览器和安卓手机上均可以跳转,但是苹果手机很顽固的从头开始了呢-- 后来我们在 ...