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

filtered 表示能过滤多少数据

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

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


filtered = 100 的含义

  1. 100% 表示没有额外的过滤
    • 存储引擎返回的所有行都完全符合查询条件,服务器层不需要额外过滤。
    • 通常出现在以下情况:
      • 查询条件中的列全部被索引覆盖(即使用了覆盖索引)。
      • 没有 WHERE 条件,或者 WHERE 条件仅通过索引就能完全匹配。
  2. 与 type 和 key 的关系
    • 如果 type 是 ref、eq_ref、range 等高效访问类型,且 key 使用了正确的索引,filtered 通常会接近 100%。
    • 如果 type 是 ALL(全表扫描)或 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 较低,需检查索引是否充分覆盖查询条件,或考虑优化查询逻辑。
  • 结合 type、key、rows 等列综合分析执行计划。
相关推荐
GreatSQL社区1 分钟前
主从复制SQL线程中断——字符集砸出的坑
java·数据库·算法
XLYcmy17 分钟前
AI 赋能后中文与英文数据库对比分析报告 上
数据库·ai·llm·prompt·检索·wos·cnki
这个DBA有点耶1 小时前
ELT 工具选型完整指南:从 ETL 差异分析到工程落地
数据库·架构·代码规范
IvorySQL1 小时前
PostgreSQL 日报|堆表选择性索引更新(10 月 13 日)
数据库·人工智能·postgresql·开源·区块链
张洛闻Eren1 小时前
Ansible【第一课】:Ansible介绍
运维·数据库·云原生·kubernetes·github·ansible
PC2005-cloud1 小时前
Mysql学习笔记:InnoDB Cluster 集群从零搭建实战,基于 Docker 实现高可用读写分离架构
笔记·学习·mysql
深圳市益普科技有限公司2 小时前
中小封装厂上 MES,为什么十个项目九个坑?
大数据·数据库·人工智能
云边云科技_云网融合2 小时前
从 POS 机到访客 Wi-Fi:零售门店安全建设的完整解法
服务器·网络·数据库
天行健,君子而铎2 小时前
知形-数据库风险监测系统:非侵入式、可溯源、差异化的数据库安全方案
网络·数据库·安全
这个DBA有点耶2 小时前
分布式事务深度:TCC空回滚、悬挂与Saga补偿风暴的根因与解法
数据库·mysql·代码规范