mysql索引优化后如何验证效果_mysql性能测试方法

发布时间 - 2026-02-01 00:00:00    点击率:
必须用EXPLAIN确认索引是否实际生效,重点看type、key、rows;结合慢日志、performance_schema、sysbench压测及InnoDB缓冲池指标综合验证优化效果。

EXPLAIN 看执行计划是否真的走了新索引

加了索引不等于用了索引,必须确认查询实际走的是你建的那条。在 SELECT 语句前加 EXPLAIN,重点看 type(越靠前越好,ref/rangeALL 强)、key(是否显示你新建的索引名)、rows(预估扫描行数是否显著下降)。

常见误判点:

  • key 为空或显示其他索引名 → 索引未命中,可能是 WHERE 条件没覆盖索引最左前缀,或存在隐式类型转换(比如字符串字段用数字比较)
  • rows 和表总行数接近 → 实际还是全表扫描,索引可能失效或选择性太低
  • 用了 ORDER BYExtra 出现 Using filesort → 排序无法利用索引,需检查是否能把排序字段加入联合索引末尾

SLOW_LOGperformance_schema 抓真实慢查询

开发环境 EXPLAIN 看得再好,也代替不了线上真实流量下的表现。开启 MySQL 慢查询日志,设置 long_query_time = 1(甚至 0.5),让业务跑一段时间后分析日志:

  • mysqldumpslow -s t -t 10 /var/lib/mysql/slow.log 找出耗时 top 10 的语句
  • 对比优化前后同一 SQL 的平均执行时间、锁等待次数、扫描行数(Rows_examined
  • 启用 performance_schema 后,查 events_statements_summary_by_digest 表,能按指纹聚合统计,避免被参数化差异干扰

注意:不要只看单次执行时间,要关注 P95/P99 延迟和抖动——有些 SQL 平均快了,但偶发卡顿更严重,可能是因为索引导致回表放大或锁竞争加剧。

sysbench 做可控压测对比

想量化索引优化收益,就得控制变量压测。用 sysbench 跑相同数据量、相同并发、相同读写比例的 OLTP 场景:

  • 先用 sysbench oltp_read_write --tables=16 --table-size=1000000 prepare 初始化数据
  • 分别对原表和加索引后的表执行 run,记录 queries per secondlatency (avg/max)
  • 关键要看 95th percentile latency 是否下降,以及 MySQL Threads_running 峰值是否降低 —— 后者反映锁/IO压力是否缓解

容易忽略的一点:sysbench 默认用主键范围扫描,如果你优化的是非主键字段,得自定义 Lua 脚本把 WHERE 条件改成目标字段,否则压测根本打不到新索引上。

监控 InnoDB_buffer_pool_readsHandler_read_* 指标

索引优化最终要落到 IO 和内存效率上。观察以下两个关键指标的

变化:

  • InnoDB_buffer_pool_reads:每秒从磁盘读取页的次数。优化后该值应明显下降,说明更多数据从 buffer pool 命中
  • Handler_read_next vs Handler_read_rnd_next:前者是索引有序扫描,后者是随机回表读行。如果后者大幅减少,说明减少了不必要的回表操作

这些指标在 SHOW GLOBAL STATUS 里查,建议在压测前后各采样一次,计算差值比。别只盯 QPS 上升——有时候 QPS 没变,但 buffer pool hit rate 从 92% 升到 99%,这才是索引真正起效的信号。


# mysql  # ai  # 性能测试  # 开发环境  # mysql索引  # 隐式类型转换  # lua  # sql  # select  # 字符串  # using  # var  # 类型转换  # 并发  # table  # 执行时间  # 行数  # 用了  # 的是  # 主键  # 如果你  # 是因为  # 走了  # 看得  # 要看 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 魔方云NAT建站如何实现端口转发?  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  如何使用 jQuery 正确渲染 Instagram 风格的标签列表  Python面向对象测试方法_mock解析【教程】  HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  Python自动化办公教程_ExcelWordPDF批量处理案例  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  教学论文网站制作软件有哪些,写论文用什么软件 ?  Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例  Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】  Laravel怎么实现模型属性的自动加密  java ZXing生成二维码及条码实例分享  HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】  Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤  Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  如何挑选最适合建站的高性能VPS主机?  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制  ,交易猫的商品怎么发布到网站上去?  Laravel怎么使用artisan命令缓存配置和视图  如何获取免费开源的自助建站系统源码?  郑州企业网站制作公司,郑州招聘网站有哪些?  如何在七牛云存储上搭建网站并设置自定义域名?  Android滚轮选择时间控件使用详解  Python自然语言搜索引擎项目教程_倒排索引查询优化案例  作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能  Laravel怎么清理缓存_Laravel optimize clear命令详解  智能起名网站制作软件有哪些,制作logo的软件?  今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】  Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置  iOS正则表达式验证手机号、邮箱、身份证号等  python中快速进行多个字符替换的方法小结  如何在IIS中配置站点IP、端口及主机头?  如何在万网自助建站平台快速创建网站?  Laravel如何自定义分页视图?(Pagination示例)  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  Win11怎么开启自动HDR画质_Windows11显示设置HDR选项  Laravel Session怎么存储_Laravel Session驱动配置详解  Laravel如何优化应用性能?(缓存和优化命令)  Laravel如何创建自定义中间件?(Middleware代码示例)  Laravel怎么实现支付功能_Laravel集成支付宝微信支付  北京企业网站设计制作公司,北京铁路集团官方网站?  HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】