我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL explain 中列的取值及含义讲解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL explain 中列的取值及含义讲解

前言

今天看 《mysql 是怎样允许的》和 《高性能MySQL》索引相关的部分,觉得有必要整理下 explain 中列的取值及含义。以后工作的时候翻阅查找更快。

type

type 取值含义
const使用主键 或 唯一二级索引
eq_ref被驱动表,用主键 或 唯一二级索引进行 (索引列不为空)
ref普通 的二级索引进行等值匹配 (索引列不为空)
ref_or_null普通 的二级索引进行等值匹配 (索引可以为空)
index_mergeTODO 索引合并相关的内容待探索
unique_subquery查询优化器把 in 语句优化成 exists,使用了主键 或 唯一二级索引进行 (索引列不为空)
index_subquery查询优化器把 in 语句优化成 exists,使用了普通索引
range范围扫描
index1. 使用索引覆盖, 但是要扫描全部的索引记录 where条件只命中部分索引
2. 全表扫描, 并且要对主键进行排序
all全表扫描

ref

表示等值匹配用的是什么

ref 取值含义相关列
const与key列的索引名等值匹配key
表的列名与该列进行等值匹配
func函数

rows

预计扫描的行数

filtered

是一个百分比数,key1 扫描的数作为分母, common_field 命中的结果为分子

select * from s1 where key1 > 'z' and common_field = 'a'

表关联的时候,这个指标比较重要,针对下表数据

tablerowsfiltered
s1968810
s21100

extra

extra 取值含义
Using index使用了索引覆盖
Using index condition使用了索引下推
Using where在 server 层进行了判断(没有索引的列)
Using join buffer (block Nested Loop)不能有效利用索引时,退而求其次使用缓存
Using filesort使用内存或者磁盘进行文件排序
Using temporary使用了临时表

补充: 简单阐述索引下推

client -> server -> 存储引擎,下推的意思是把筛选放到存储引擎,减少回表的数据量

形如 where key1 > xxx and key3 like ‘%a’ ,5.6 版本 like 的操作是在server层处理的,5.7.x的版本后可以在存储引擎层完成过滤。

补充:group by 优化掉额外的排序操作

select common_field, count(*) as amount from s1 group by common_field;
-- 以上语句会被 mysql 补充为
select common_field, count(*) as amount from s1 group by common_field order by common_field;
-- 如果要省略文件排序, 则显式声明为 order by null
select common_field, count(*) as amount from s1 group by common_field order by null;

后记

TODO: 用 otpimzer trace 查询优化器的具体工作过程

到此这篇关于MySQL explain 中列的取值及含义的文章就介绍到这了,更多相关MySQL explain列的取值及含义内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL explain 中列的取值及含义讲解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL explain 中列的取值及含义讲解

目录前言refrowsfilteredextra补充: 简单阐述索引下推补充:group by 优化掉额外的排序操作前言今天看 《mysql 是怎样允许的》和 《高性能MySQL》索引相关的部分,觉得有必要整理下 explain 中列的取
2023-03-21

MySQLexplain中列的取值及含义讲解

这篇文章主要介绍了MySQLexplain中列的取值及含义,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-03-21

MySQL explain中列的取值方法及含义是什么

这篇文章主要介绍“MySQL explain中列的取值方法及含义是什么”,在日常操作中,相信很多人在MySQL explain中列的取值方法及含义是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL
2023-07-05

mysql explain中key_len的含义以及计算方法是什么

这篇文章主要为大家展示了“mysql explain中key_len的含义以及计算方法是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql explain中key_len的含义以及计算
2023-06-29

关于DBA_USERS视图中ACCOUNT_STATUS 列的各种取值的含义说明

SQL> select * from sys.user_astatus_map; STATUS# STATUS---------- -------------------------------- 0 OPEN
2023-06-06

编程热搜

目录