MySQL 执行计划中 filtered = 100 是什么意思

filtered 表示能过滤多少数据

  • 和复合索引/联合索引有关
  • 和走索引时的WHERE查询条件有关

在 MySQL 的 EXPLAIN 执行计划中,filtered 列表示存储引擎返回的数据在服务器层过滤后剩余的比例 (百分比)。它的值范围是 0%100%,具体含义如下:


filtered = 100 的含义

  1. 100% 表示没有额外的过滤
    • 存储引擎返回的所有行都完全符合查询条件,服务器层不需要额外过滤。
    • 通常出现在以下情况:
      • 查询条件中的列全部被索引覆盖(即使用了覆盖索引)。
      • 没有 WHERE 条件,或者 WHERE 条件仅通过索引就能完全匹配。
  2. typekey 的关系
    • 如果 typerefeq_refrange 等高效访问类型,且 key 使用了正确的索引,filtered 通常会接近 100%
    • 如果 typeALL(全表扫描)或 index(全索引扫描),filtered 可能较低(例如 10%),表示存储引擎返回了大量数据,但服务器层只保留了一小部分。

你的执行计划分析

在你的 EXPLAIN 结果中:

  • filtered = 100
  • type = ref(使用索引等值查找)
  • key = idx_purchaser_id_related_order_sn(实际使用的索引)

这表明:

  1. 存储引擎通过索引 idx_purchaser_id_related_order_sn 快速定位到符合条件的行。
  2. 返回的所有行(预估 rows=2完全满足查询条件,服务器层无需过滤。
  3. 这是一个高效的查询 ,因为:
    • 使用了正确的索引(ref 访问类型)。
    • 没有冗余的数据读取或过滤。

对比示例:filtered < 100 的情况

如果查询是:

复制代码

sql

复制代码
`SELECT * FROM order_info_14 WHERE purchaser_id = 123 AND order_status = 'completed';`

order_status 不在索引中,执行计划可能是:

复制代码
复制代码
`type: ref, key: idx_purchaser_id_related_order_sn, filtered: 10%`
  • filtered=10% 表示:
    • 存储引擎通过 idx_purchaser_id_related_order_sn 返回了 100 行(rows=100)。
    • 但只有 10 行(10%)满足 order_status = 'completed',其余 90 行被服务器层过滤掉。

如何利用 filtered 优化查询?

  1. 追求 filtered=100
    • 确保 WHERE 条件中的列被索引覆盖(尤其是选择性高的列)。
    • 使用覆盖索引(Extra: Using index)避免回表。
  2. 警惕低 filtered
    • 如果 filtered 很低(如 1%),说明存储引擎返回了大量无用数据,可能导致性能问题。
    • 优化方法:
      • 添加复合索引(包含 WHERE 中的所有条件列)。
      • 重写查询以减少数据扫描范围。

总结

  • filtered=100 是好事,表示查询高效,没有冗余数据读取。
  • 如果 filtered 较低,需检查索引是否充分覆盖查询条件,或考虑优化查询逻辑。
  • 结合 typekeyrows 等列综合分析执行计划。
相关推荐
李广坤18 小时前
MySQL 大表字段变更实践(改名 + 改类型 + 改长度)
数据库
Turnip12022 天前
深度解析:为什么简单的数据库"写操作"会在 MySQL 中卡住?
后端·mysql
爱可生开源社区2 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba
随逸1772 天前
《从零搭建NestJS项目》
数据库·typescript
加号33 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql
シ風箏3 天前
MySQL【部署 04】Docker部署 MySQL8.0.32 版本(网盘镜像及启动命令分享)
数据库·mysql·docker
李慕婉学姐3 天前
Springboot智慧社区系统设计与开发6n99s526(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
百锦再3 天前
Django实现接口token检测的实现方案
数据库·python·django·sqlite·flask·fastapi·pip
WeiXin_DZbishe3 天前
基于django在线音乐数据采集的设计与实现-计算机毕设 附源码 22647
javascript·spring boot·mysql·django·node.js·php·html5
tryCbest3 天前
数据库SQL学习
数据库·sql