rows 是 MySQL 优化器基于统计信息估算的扫描行数,非实际值;受统计更新、索引选择性、直方图及查询条件影响,需结合 type、key、Extra 综合判断性能问题。
rows 表示 MySQL 查询优化器预估的、为获取结果需要扫描或检查的行数,不是实际执行后的精确值,而是基于统计信息做出的估算。
MySQL 在真正执行 SQL 前,会通过采样和统计信息(如索引基数、表总行数、直方图等)预测满足条件的数据量。这个预测值写在 rows 列中,用于指导优化器选择成本更低的执行路径(比如走全表扫描还是走某个索引)。它可能偏高或偏低,尤其在数据分布不均、统计信息过期、使用模糊查询(LIKE '%abc')或函数包裹字段(WHERE YEAR(create_time) = 2025)时,误差更明显。
mysql.innodb_table_stats)EXPLAIN 显示 rows = 1,常见于主键/唯一索引等值查询(const 或 eq_ref 类型)优化器无法“未卜先知”,它的估算依赖底层统计质量:
ANALYZE TABLE table_name; 可手动刷新,避免因大批量写入后统计滞后导致误判单独看 rows 数值意义有限,需结合 type、key、Extra 综合判断:
Using filesort 或 Using temporary,说明排序/分组未走索引
00,说明索引被有效利用rows 是存储引擎层预估要读取的行数(即“找多少行”),而 filtered 是 Server 层预估这些行中最终满足 WHERE 条件的比例(百分比)。两者相乘 ≈ 最终返回给上层的行数(例如 rows=1000, filtered=10.00 → 预估 100 行满足条件)。注意:filtered 值低(如