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的理解相关推荐

  1. mysql中explain的使用,mysql使用方法_mysql中explain函数的使用方法

    摘要 腾兴网为您分享:mysql中explain函数的使用方法,英语字典,小熊到家,腾讯新闻,刷机大师等软件知识,以及adobeflashplayerformac,灯光工厂,全民小视频,网盘解析,37 ...

  2. mysql中explain命令

    原文链接:https://blog.csdn.net/jiadajing267/article/details/81269067 其他文章: https://www.cnblogs.com/tufuj ...

  3. MySQL中EXPLAIN详解

    EXPLAIN作为MySQL的性能分析神器,读懂其结果是很有必要的,然而我在各种搜索引擎上竟然找不到特别完整的解读.都是只有重点,没有细节(例如type的取值不全.Extra缺乏完整的介绍等). my ...

  4. MySQL中Explain用法详解

    Explain简介 我们在写后端程序的时候,通常会写sql来查询数据,如果是单表查询的时候,那直接select就完事了,但是如果是连表查询数据量也不小的话,就造成了查询速度会比较慢,那么我们该怎么知道 ...

  5. Mysql中explain命令查看语句执行概况

    Mysql中可以使用explain命令查看查询语句的执行方式,使用方法举例:explain + 查询语句 例如:explain select * from user_info 几个重要的字段说明: t ...

  6. 四、MySql中explain的时候出现Using where; Using index; Using temporary; Using filesort

    通过explain查看sql的执行计划时,Extra字段的值往往会看到Using where; Using index; Using temporary; Using filesort 一.using ...

  7. mysql 输出解释怎么看_了解MySQL中EXPLAIN解释命令

    1 EXPLAIN概念 EXPLAIN会向我们提供一些MySQL是执行sql的信息: EXPLAIN可以解释说明 SELECT, DELETE, INSERT, REPLACE, and UPDATE ...

  8. MySQL中EXPLAIN命令详解

    EXPLAIN显示了MySQL如何使用索引来处理SELECT语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句. 使用方法,在select语句前加上EXPLAIN就可以了: 如: EXPLA ...

  9. mysql中explain的用法

    最近在做性能测试中经常遇到一些数据库的问题,通常使用慢查询日志可以找到执行效果比较差的sql,但是仅仅找到这些sql是不行的,我们需要协助开发人员分析问题所在,这就经常用到explain explai ...

  10. 详解MySQL中EXPLAIN解释命令

    explain显示了mysql如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句. 使用方法,在select语句前加上explain就可以了: 如: expla ...

最新文章

  1. java中的浮点计算
  2. 某计算机系大二级共有5个班,2016年计算机二级考试MS Office题库及答案
  3. 马化腾评 Facebook 加密货币;苹果或将 15% 产能移出中国;Python 新版发布 | 极客头条...
  4. python如何调用阿里云接口_阿里云 API调用实践(python语言)
  5. logo是啥_logo是什么?
  6. 在线代理和缓存工具(转)
  7. 订阅个人Blog最新评论的方法
  8. 程序开发学习和工作中常用工具——Doxygen和graphviz和HTML Help WorkShop以及 Easy CHM
  9. Could not resolve dependencies for project
  10. 测试工具大全http://blog.csdn.net/vincetest/archive/2006/12/12/1440353.aspx
  11. zencart 模板设计
  12. python代码螺旋线怎么写_python实现画五角星和螺旋线的示例
  13. 迭代法求解贝尔曼期望方程的数学证明
  14. 名词从句、定语从句、状语从句的位置及图示
  15. java计算机毕业设计智慧防疫上报系统服务端源码+数据库+系统+lw文档
  16. 时间序列的数据分析(七):数据平稳性
  17. spi子系统实现数码管控制
  18. UE4地形简单材质球制作,及地形变黑处理办法
  19. android 常用加密,分享一下Android各种类型的加密
  20. 关于SCCM软件分发管理分享

热门文章

  1. 捋一捋Vue构造函数
  2. 安装Linux系统跳过系统检测,PXE——无人值守自动安装Linux操作系统(踩坑记录)...
  3. Hive报错Error during job, obtaining debugging information...
  4. 牛!这个工具能将公式图片转化为 LaTeX 格式
  5. iPhone各种机型尺寸、屏幕分辨率
  6. 纯干货:Linux抓包命令集锦
  7. linux平台使用yum安装mysql
  8. 阿里云国际站怎么注册?
  9. struts全局视图与局部视图
  10. Spigot 算法之一 计算调和级数的和