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

一文带你理解MySql中explain结果filtered

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

北京

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

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

看不清楚,换张图片

免费获取短信验证码

一文带你理解MySql中explain结果filtered

mysql explain语句的返回结果中,filtered字段要怎么理解?

MySql5.7官方文档中描述如下:

The filtered column indicates an estimated percentage of table rows filtered by the table condition. The maximum value is 100, which means no filtering of rows occurred. Values decreasing from 100 indicate increasing amounts of filtering. rows shows the estimated number of rows examined and rows × filtered shows the number of rows joined with the following table. For example, if rows is 1000 and filtered is 50.00 (50%), the number of rows to be joined with the following table is 1000 × 50% = 500.

这段文字不是很好理解,举例来说,有如下三个查询语句的explain结果,针对b和c表的显示filtered是100,而针对a表的显示是18。

+-------------+-------+--------+---------+---------+------+----------+
| select_type | table | type   | key     | key_len | rows | filtered |
+-------------+-------+--------+---------+---------+------+----------+
| PRIMARY     | a     | range  | search  | 4       |  174 |   18.00  |
| PRIMARY     | b     | eq_ref | PRIMARY | 4       |    1 |   100.00 |
| PRIMARY     | c     | ALL    | PRIMARY | 4       |    1 |   100.00 |

我们可以怎么理解filtered的值呢?从filtered的值中得出什么结论呢?到底是100更好还是18更好?

首先,这里的filtered表示通过查询条件获取的最终记录行数占通过type字段指明的搜索方式搜索出来的记录行数的百分比。

以上图的第一条语句为例,MySQL首先使用索引(这里的type是range)扫描表a,预计会得到174条记录,也就是rows列展示的记录数。接下来MySql会使用额外的查询条件对这174行记录做二次过滤,最终得到符合查询语句的32条记录,也就是174条记录的18%。而18%就是filtered的值。

更完美的情况下,应该是使用某个索引,直接搜索出32条记录并且过滤掉另外82%的记录。

因此一个比较低filtered值表示需要有一个更好的索引,假如type=all,表示以全表扫描的方式得到1000条记录,且filtered=0.1%,表示只有1条记录是符合搜索条件的。此时如果加一个索引可以直接搜出来1条数据,那么filtered就可以提升到100%。

由此可见,filtered=100%确实是要比18%要好。

当然,filtered不是万能的,关注执行计划结果中其他列的值并优化查询更重要。比如为了避免出现filesort(使用可以满足order by的索引),即使filtered的值比较低也没问题。再比如上面filtered=0.1%的场景,我们更应该关注的是添加一个索引提高查询性能,而不是看filtered的值。

参考内容:

MySQL :: MySQL 5.7 Reference Manual :: 8.8.2 EXPLAIN Output Format

innodb - What is the meaning of filtered in MySQL explain? - Database Administrators Stack Exchange

总结 

到此这篇关于MySql中explain结果filtered的文章就介绍到这了,更多相关MySql中explain结果filtered内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

免责声明:

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

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

一文带你理解MySql中explain结果filtered

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

下载Word文档

猜你喜欢

一文带你了解MySQL之Explain执行计划

前言: 一条查询语句在经过MySQL查询优化器的各种基于成本和规则的优化会后生成一个所谓的执行计划,这个执行计划展示了接下来具体执行查询的方式,比如多表连接的顺序是什么,对于每个表采用什么访问方法来具体执行查询等等。MySQL为我们提供了E
2023-08-18

一文带你了解MySQL中的事务

目录一.什么是事务二.事务操作演示小结三.事务的特性四.事务的隔离级别概述四种隔离级别脏读、不可重复读、幻读操作一.什么是事务在mysql中的事务(Transaction)是由存储引擎实现的,在MySQL中,只有InnoDB存储引擎才支持
2023-02-17

一文带你了解MySQL之连接原理

目录一、连接简介1.1 连接的本质1.2 连接过程简介1.3 内连接和外连接1.4 左外连接1.5 右外连接1.6 内连接小结二、连接的原理2.1 嵌套循环连接(Nested-Loop Join)2.2 使用索引加快连接速度2.3 基于块的
2023-05-22

【MySQL】一文带你了解MySQL中的子查询

文章目录 1. 需求分析与问题解决1. 1实际问题1.2 子查询的基本使用1.3 子查询的分类 2. 单行子查询2.1 单行比较操作符2.2 代码示例2.3 HAVING 中的子查询2.4 注意的问题 3. 多行子查询3.1
2023-08-18

一文带你了解MySQL中的锁机制

目录一.概述 分类二.MyISAM表锁如何加表锁写锁演示三.InnoDB行锁行锁特点一.概述锁是计算机协调多个进程或线程并发访问某一资源的机制(避免争抢)。在数据库中,除传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一
2023-02-17

一文带你深入理解Golang中的RWMutex

这篇文章主要为大家详细介绍了Golang中RWMutex的相关知识,知其然,更要知其所以然。文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
2023-05-14

一文带你全面理解Python中的self

对于初学Python的同学来说,在class中经常看到self。那么,到底self是个啥?这篇文章小编就来带大家深入了解一下,希望对大家有所帮助
2023-03-03

一文带你深入理解Golang中的泛型

Go 在泛型方面一直被诟病,因为它在这方面相对比较落后。但是,在 Go 1.18 版本中,泛型已经被正式引入,成为了 Go 语言中一个重要的特性。本文将会详细介绍 Go 泛型的相关概念,语法和用法,希望能够帮助大家更好地理解和应用这一特性
2023-05-18

一文带你了解MySQL中触发器的操作

目录概述介绍触发器的特性操作—创建触发器操作—new和old操作—查看触发器操作—删除触发器注意事项概述介绍触发器,就是一种特殊的存储过程。触发器和存储过程一样是一个能够完成特定功能、存储
2023-02-17

一文带你了解MySQL之用户和权限原理

前言 在学习这一章节的时候,我们可以先了解一下SQL语言,SQL语言共分为四大类: 数据查询语言DQL(Data QueryLanguage):select 等数据操纵语言DML(database manage language):inse
2023-08-16

一文带你了解Vue中的axios和proxy代理

这篇文章主要为大家详细介绍了Vue中的axios和proxy代理的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以参考一下
2023-03-21

一文带你深入理解Linux中的nohup命令

目录前言nohup是什么nohup语法规则nohup使用方法后台运行命令标准输出重定向到文件标准错误输出重定向到文件将标准输出和标准错误输出都重定向到文件nohup后台进程管理总结前言 当我们在linux或Unix系统上执行一个长时间运行的
2023-03-31

一文带你理解JavaScript中的函数式编程

函数式编程是一种编程规范,也是一种对语言程序(比如JavaScript)本身能力的运用方式。本篇文章将从编程规范来介绍函数式编程的到底是一种什么样的规范,希望对大家有所帮助
2023-02-20

一文带你深入理解Go语言中的sync.Cond

sync.Cond 表示的是条件变量,它是一种同步机制,用来协调多个 goroutine 之间的同步。本文将通过示例为大家介绍Go语言中sync.Cond的使用,需要的可以参考一下
2023-01-31

一文带你快速理解JavaScript中call()函数的使用

这篇文章主要为大家详细介绍了JavaScript中call()函数的使用的相关知识,文中的示例代码讲解详细,具有一定的学习价值,需要的可以参考一下
2023-03-23

编程热搜

目录