讲师中心 微信公众号
AI工具推荐 视频效率加速

如何通过MySQL Handler_read指标判断索引效率

大晨姑娘_4373

大晨姑娘_4373

发布时间:2026-08-31 08:23:15

|

518人浏览过

|

来源于php中文网

原创

Handler_read_key高说明索引被真正用于精准定位行,Handler_read_rnd_next高则表明存在全表扫描或回表开销大;需配合FLUSH STATUS与单次查询观测,二者数量级关系比EXPLAIN更真实反映索引使用效果。

如何通过mysql handler_read指标判断索引效率

Handler_read_key 高不高,直接说明索引有没有被真正用上

这个值代表 MySQL 通过索引键(比如 WHERE user_id = ?)精准定位行的次数。它不是“用了索引就加1”,而是“靠索引跳转到某行”才计数——所以只要看到 Handler_read_key 显著上升,基本可以确认索引参与了定位。

常见误区:SELECT * 扫全表但走了主键索引,Handler_read_key 可能为 0;而一个带 WHERE status = 'active' 的查询如果命中了 status 索引,Handler_read_key 就会明显增加。

  • 线上观察时,建议在业务低峰期先执行 FLUSH STATUS,再跑目标 SQL,立刻查 SHOW STATUS LIKE 'Handler_read_key'
  • 如果该值始终接近 0,即使 EXPLAIN 显示 type=ref 或 key=xxx,也要怀疑是否条件没打中索引最左前缀,或字段存在隐式类型转换
  • 对比多个相似查询时,Handler_read_key 增幅大的那个,往往更依赖索引、也更可控

Handler_read_rnd_next 高得离谱,基本等于在裸奔扫表

Handler_read_rnd_next 是 InnoDB 层面最刺眼的性能红灯:它统计的是“在数据文件里一行行往下读”的请求数,本质就是全表扫描或临时结果集回表后的顺序读。只要它远高于 Handler_read_key 或 Handler_read_next,就说明索引没拦住大部分数据访问。

典型场景:SELECT name, email FROM users WHERE city = 'Shanghai',但 city 列没索引,或者有索引但 city 值重复率太高(比如 80% 用户都在上海),优化器干脆放弃走索引,直接扫聚簇索引——这时 Handler_read_rnd_next 会飙升,而 Handler_read_key 几乎不动。

MySQL
MySQL

编写正确的MySQL查询,避免字符集、索引和锁方面的常见陷阱。

下载
  • 注意区分 Handler_read_rnd 和 Handler_read_rnd_next:_rnd 多见于排序临时表的随机取行,_rnd_next 才是真正的“扫表级”指标
  • 如果某条慢查询的 Handler_read_rnd_next 达到几万甚至几十万,别急着调优 SQL,先检查对应列是否缺失索引、或现有索引是否覆盖了 WHERE 条件
  • 建复合索引时,如果 WHERE 用 a = ? AND b > ?,但 SELECT 还要返回 c,记得把 c 加进索引末尾做成覆盖索引,否则仍会触发大量 Handler_read_rnd_next

Handler_read_next 和 Handler_read_first 揭示索引扫描模式

Handler_read_next 上升,说明 MySQL 正在按索引顺序“向后扫”——常见于范围查询(WHERE create_time BETWEEN ? AND ?)、ORDER BY indexed_col 或联合索引的最左前缀匹配后继续遍历。它本身不坏,但值过大可能意味着范围太宽、或缺少更精确的过滤条件。

Handler_read_first 高,则大概率是在做全索引扫描(比如 SELECT id FROM t ORDER BY id 没加 LIMIT),它每次从索引最左端开始读,对性能压力不小,尤其当索引很大时。

  • 如果 Handler_read_first 高而 Handler_read_key 很低,基本可断定是“伪索引使用”:SQL 没带有效 WHERE,只是靠索引排序或遍历,实际和全表扫开销接近
  • 对比两个查询的 Handler_read_next / Handler_read_key 比值:比值越小,说明索引定位越准、扫描越少;比值 > 10 常提示需要收紧查询条件或调整索引结构
  • Handler_read_prev 显著升高,通常对应 ORDER BY ... DESC 且无法利用索引倒序扫描(比如联合索引只支持单向 B+ 树遍历),这时考虑添加 DESC 显式索引(MySQL 8.0+ 支持)

必须配合 FLUSH STATUS + 单次执行,否则数据毫无意义

这些 Handler_read_* 计数器是全局累加的,不重置就查,看到的可能是过去几小时所有请求的混合结果,完全无法定位具体 SQL 的行为。真实诊断中,漏掉 FLUSH STATUS 是最常踩的坑。

  • 标准操作流只有三步:FLUSH STATUS → 执行一次目标 SQL(务必单次,禁用批量或连接池复用)→ 立刻执行 SHOW STATUS LIKE 'Handler_read%'
  • 不要依赖 SHOW GLOBAL STATUS,它反映的是整个实例历史累计值;用 SHOW SESSION STATUS 更精准,但前提是你的测试连接没被复用
  • 如果应用使用连接池(如 HikariCP),测试前需确保连接是新建立的,或手动执行 RESET QUERY CACHE(虽已弃用)和 FLUSH STATUS 组合,避免状态污染
真实环境里,Handler_read_key 和 Handler_read_rnd_next 的数量级关系比任何 EXPLAIN 的 rows 估算都可靠;但它们不会告诉你“为什么没走索引”,只负责诚实报数——那部分得靠 optimizer_trace 或字段类型/字符集一致性检查来补全。

热门AI工具

更多
Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

1993

2023.06.20

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

1239

2023.06.21

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

715

2023.07.18

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2632

2023.07.19

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

4328

2023.07.25

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

1019

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

4591

2023.08.11

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

4142

2023.08.14

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

160

2026.09.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 176人学习

使用phpenv集成环境安装极致CMS
使用phpenv集成环境安装极致CMS

共2课时 | 279人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn