MySQL带LIMIT的查询能否返回实际扫描的行数?
如何让MySQL返回查询扫描的行数
当然可以,MySQL提供了多种方式获取查询过程中扫描的行数,区分预估和实际扫描值两种场景:
一、获取预估扫描行数(执行前)
如果想在执行查询前了解MySQL预估需要扫描的行数,可以用EXPLAIN语句:
EXPLAIN SELECT * FROM `table` WHERE location like '%New York%' LIMIT 10;
查看结果中的rows列,这是MySQL基于表统计信息给出的预估扫描行数,可用来提前判断查询的大致开销。
二、获取实际扫描行数(执行后)
如果需要查询实际执行时扫描的行数,有两种常用方法:
1. 查看会话状态变量
先执行目标查询:
SELECT * FROM `table` WHERE location like '%New York%' LIMIT 10;
然后执行以下语句查看本次会话中最近一次查询的扫描行数:
SHOW SESSION STATUS LIKE 'Rows_examined';
返回的Value值就是实际扫描的行数(比如你示例中的30行)。
2. 使用EXPLAIN ANALYZE(MySQL 8.0.18+)
如果你的MySQL版本是8.0.18及以上,可以直接用EXPLAIN ANALYZE执行查询,它会在执行完成后返回包含实际执行统计的结果:
EXPLAIN ANALYZE SELECT * FROM `table` WHERE location like '%New York%' LIMIT 10;
结果中会明确标注Rows examined字段,显示实际扫描的行数,同时还能看到其他执行细节。
应用场景
像你提到的例子,通过实际扫描行数(30行)和返回结果数(10条),可以估算关键词的匹配比例,进而:
- 提前给用户展示大致的结果数量,无需等待全量统计完成
- 针对千万级数据,根据扫描比例估算全量统计的耗时,实现简易的加载进度条
内容的提问来源于stack exchange,提问作者Ned Hulton
相关产品推荐
相关产品推荐

