FAQ系列 | EXPLAIN执行计划中要重点关注哪些要素

简介: FAQ系列 | EXPLAIN执行计划中要重点关注哪些要素

导读

EXPLAIN的结果中,有哪些关键信息值得注意呢?

MySQL的EXPLAIN当然和ORACLE的没法比,不过我们从它输出的结果中,也可以得到很多有用的信息。

总的来说,我们只需要关注结果中的几列:

列名 备注
type 本次查询表联接类型,从这里可以看到本次查询大概的效率
key 最终选择的索引,如果没有索引的话,本次查询效率通常很差
key_len 本次查询用于结果过滤的索引实际长度,参见另一篇分享(FAQ系列-解读EXPLAIN执行计划中的key_len
rows 预计需要扫描的记录数,预计需要扫描的记录数越小越好
Extra 额外附加信息,主要确认是否出现 Using filesort、Using temporary 这两种情况


首先看下 type 有几种结果,分别表示什么意思:

类型 备注
ALL 执行full table scan,这是最差的一种方式
index 执行full index scan,并且可以通过索引完成结果扫描并且直接从索引中取的想要的结果数据,也就是可以避免回表,比ALL略好,因为索引文件通常比全部数据要来的小
range 利用索引进行范围查询,比index略好
index_subquery 子查询中可以用到索引
unique_subquery 子查询中可以用到唯一索引,效率比 index_subquery 更高些
index_merge 可以利用index merge特性用到多个索引,提高查询效率
ref_or_null 表连接类型是ref,但进行扫描的索引列中可能包含NULL值
fulltext 全文检索
ref 基于索引的等值查询,或者表间等值连接
eq_ref 表连接时基于主键或非NULL的唯一索引完成扫描,比ref略好
const 基于主键或唯一索引唯一值查询,最多返回一条结果,比eq_ref略好
system 查询对象表只有一行数据,这是最好的情况

上面几种情况,从上到下一次是最差到最好


再来看下Extra列中需要注意出现的几种情况:

关键字 备注
Using filesort 将用外部排序而不是按照索引顺序排列结果,数据较少时从内存排序,否则需要在磁盘完成排序,代价非常高,需要添加合适的索引
Using temporary 需要创建一个临时表来存储结果,这通常发生在对没有索引的列进行GROUP BY时,或者ORDER BY里的列不都在索引里,需要添加合适的索引
Using index 表示MySQL使用覆盖索引避免全表扫描,不需要再到表中进行二次查找数据,这是比较好的结果之一。注意不要和type中的index类型混淆
Using where 通常是进行了全表引扫描后再用WHERE子句完成结果过滤,需要添加合适的索引
Impossible WHERE 对Where子句判断的结果总是false而不能选择任何数据,例如where 1=0,无需过多关注
Select tables optimized away 使用某些聚合函数来访问存在索引的某个字段时,优化器会通过索引直接一次定位到所需要的数据行完成整个查询,例如MIN()\MAX(),这种也是比较好的结果之一

再说下,5.6开始支持optimizer trace功能,看样子在执行计划方面是要逐渐和ORACLE看齐 :)

            </div>
相关文章
MCS-51单片机串行接口
MCS-51单片机串行接口
635 1
|
传感器 人工智能 搜索推荐
数字孪生在医疗健康中的作用:重塑医疗体验与提升服务质量
数字孪生技术在医疗健康领域的应用正逐步展现出巨大潜力,通过构建患者的个性化数字模型,实现精准医疗、疾病预测、手术优化、设备仿真和患者管理,显著提升了医疗服务质量与患者体验。
|
开发框架 C# iOS开发
基于C#开源、功能强大、灵活的跨平台开发框架 - Uno Platform
基于C#开源、功能强大、灵活的跨平台开发框架 - Uno Platform
505 3
|
机器学习/深度学习 传感器 人工智能
【AIGC】AIGC全面介绍
AIGC,即人工智能生成内容,是指基于生成对抗网络(GAN)、大型预训练模型等人工智能的技术方法,通过已有数据的学习和识别,以适当的泛化能力生成相关内容的技术。它是人工智能1.0时代进入2.0时代的重要标志,标志着人工智能从计算智能、感知智能向认知智能的进阶发展。
1849 60
|
机器学习/深度学习 人工智能 监控
YOLO的前世今生以及来龙去脉的背景介绍
YOLO的前世今生以及来龙去脉的背景介绍
|
JavaScript 前端开发 Java
一文让你了解微服务契约测试
谈到微服务,大家都想到契约测试,到底什么是契约测试呢,为什么要使用契约测试呢,关于这样的文章很多,本文将结合Spring Boot让你了解微服务契约测试。
241 0
一文让你了解微服务契约测试
|
Ubuntu 网络安全 数据安全/隐私保护
ubuntu server连接wifi教程
本文提供了一个简化Ubuntu Server在Raspberry Pi系统上配置过程的脚本"config_ubuntu_server",包括自动和手动两种方法来设置root权限、SSH配置,并连接WiFi,同时支持无密码SSH访问,适合初学者和高级用户。
583 3
|
机器学习/深度学习 传感器 边缘计算
深度学习之边缘计算与云计算结合
边缘计算与云计算结合是现代人工智能和物联网领域的重要技术方向。通过将边缘计算的实时处理能力和云计算的强大计算资源结合起来,可以实现高效、低延迟的智能应用。
352 1
|
SQL 安全 关系型数据库
一切都是为了安全!数据脱敏的 几种方案
一切都是为了安全!数据脱敏的 几种方案
200 0
|
编解码 安全 Windows
如何解决Windows电脑自动黑屏问题?
【8月更文挑战第19天】以下是可能导致Windows电脑自动黑屏的原因及解决方法:硬件问题包括显示器连接不良、显卡故障(如风扇不转或驱动过时)、内存条接触不良、CPU过热及电源供应不稳定。软件问题涉及系统故障(尝试系统还原或运行SFC扫描)、显卡驱动不兼容、软件冲突或恶意软件感染。此外,不当的电源管理和显示设置也可能引发黑屏。针对这些问题,采取相应的检查和修复措施通常可以解决问题。
1058 0