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 等列综合分析执行计划。
相关推荐
虹科网络安全1 小时前
艾体宝产品|深度解读 Redis 8.4 新增功能:原子化 Slot 迁移(下)
数据库·redis·bootstrap
有味道的男人2 小时前
对接亚马逊平台接口,商品全量信息一键抓取
数据库
Web极客码2 小时前
2026年Linux VPS安全加固清单:SSH、防火墙与审计就绪配置
运维·服务器·数据库
逻辑驱动的ken4 小时前
Java高频面试考点18
java·开发语言·数据库·算法·面试·职场和发展·哈希算法
qq_392690664 小时前
Redis怎样应对Redis集群整体宕机带来的雪崩
jvm·数据库·python
快乐非自愿5 小时前
Redis--SDS字符串与集合的底层实现原理
数据库·redis·缓存
这儿有一堆花5 小时前
住宅代理(Residential Proxy)技术指南
开发语言·数据库·php
茉莉玫瑰花茶5 小时前
LangChain 核心组件 [ 2 ]
java·数据库·langchain
存在的五月雨6 小时前
Mysql 索引的一些
数据库·mysql
黄俊懿6 小时前
MySQL主从复制:从“异步“到“GTID“,数据同步的进化之路
数据库·sql·mysql·oracle·架构·dba·db