首页/数据/数据库速查/rows 与 filtered 解读
性能与调优57 条

rows 与 filtered 解读

rows 是优化器估算的要扫描行数,filtered 是条件过后剩余百分比:rows × filtered% ≈ 实际参与后续处理的行数,两者决定计划成本的主体。

数据库速查数据更新于 2026-10-13

rows 与 filtered 是什么

EXPLAIN 的 rows 是优化器估算的要扫描行数,filtered 是这一步条件过滤后预估剩余的行百分比。两者相乘约等于参与后续连接或排序的行数,是执行计划成本估算的主体。读计划时最有价值的判断是「扫描量是否与返回量严重不匹配」:rows 很大而 filtered 很低,说明大量行被读出来又丢掉,通常意味着缺索引或条件写法不当。

基本信息

适用版本MySQL 5.7 / 8.0(5.7 起 filtered 才有较完整支持)
rows 含义优化器估算的扫描行数,来自统计信息
filtered 含义条件过滤后剩余比例,取值 0-100
估算联动rows × filtered% ≈ 进入下一步的行数
失真原因统计信息陈旧、直方图缺失、条件含函数或隐式转换
改善手段ANALYZE TABLE、补直方图、改写法让条件下推

典型使用场景

  • 判断慢查询主因:是扫得多还是连接放大
  • 评估新索引价值:加索引前先看 rows 与 filtered 的差距
  • 排查统计失真:数据大改后计划突变,先刷新统计再判断
  • 多表连接分析:定位连接顺序中被驱动表被放大的那一环
  • 上线前评审:对比计划中的扫描量与业务预期数据量

对比例子

对比例子
-- 期望形态:rows 小、filtered 高
EXPLAIN SELECT * FROM appdb.orders WHERE user_id = 999 AND status = 1;

-- 反例形态:rows=1500000、filtered=10.00
-- 即估算扫 150 万行才留下 15 万行,说明条件未有效下推或索引选择性差

-- 数据分布变化后刷新统计,再看计划是否恢复合理
ANALYZE TABLE appdb.orders;
EXPLAIN FORMAT=JSON SELECT * FROM appdb.orders WHERE user_id = 999 AND status = 1\G

连接场景读法

连接场景读法
-- 被驱动表 filtered 很低,说明每次连接都读出大量行再过滤
EXPLAIN SELECT o.id, u.name
FROM appdb.orders o
JOIN appdb.users u ON u.id = o.user_id
WHERE o.status = 1;

-- 重点看 u 那一行的 rows 与 filtered:rows 越大、filtered 越低,放大越严重
-- 缓解方向:给连接列建索引,或把过滤条件下推到派生表减少被驱动行数

字段读法对照

字段含义异常表现
rows估算扫描行数与实际表规模严重不符说明统计失真
filtered条件过滤后剩余百分比很低说明条件几乎没减少扫描量
rows × filtered进入后续处理的行数远大于最终返回行数即为浪费
Extra: Using where条件在服务层过滤配合低 filtered 往往意味着没用上索引
Extra: Using filesort需要额外排序rows 大时排序开销成倍放大
估算值随统计信息变化:大批量写入、删除或迁移后执行计划可能突变,先执行 ANALYZE TABLE 再判断是否真的需要改索引;8.0 还可以为分布不均的列建立直方图来改善估算。
rows=1 不代表一定很快:等值查找命中一行但该行包含大字段(TEXT、BLOB)或返回结果集极大时,网络与磁盘开销依然可观;判断性能要结合返回数据量与 Extra 信息。

易错点

  • 拿陈旧统计信息下结论:rows 严重偏低或偏高,据此删索引或加索引都可能错上加错
  • 只看 rows 不看 filtered:大量行被读出又过滤掉的场景被完全忽略
  • 忽略被驱动表的放大效应:连接右侧 rows 大、filtered 低,整体耗时由它决定
  • 把 EXPLAIN 估算当实际执行数据:需要精确数据应看 EXPLAIN ANALYZE(8.0.18+)或慢日志中的实际行数
  • 条件里对索引列使用函数或隐式类型转换:索引失效导致 rows 直接变成全表扫描量

数据来源与参考

  • MySQL 8.0 Reference Manual: EXPLAIN rows/filtered

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌