mybatis慢sql无所遁形
痛点问题:
扫描项目的慢sql 并提出优化建议
开源项目地址:gitee:mybatis-sql-optimizer-spring-boot-starter: 这个starter可以帮助开发者在开发阶段发现SQL性能问题,并提供优化建议,从而提高应用程序的数据库访问效率。
github:https://github.com/chenjunwenhao/mybatis-sql-optimizer-spring-boot-starter
专为 MyBatis 打造的 SQL 智能优化解决方案,无需修改业务代码即可获得专业级 SQL 优化建议,让慢查询无所遁形!
🌟 核心特性
一键式 SQL 优化
- 智能分析引擎:自动识别
SELECT *
、执行计划分析
、索引失效
等 20+ 常见问题 - 执行计划洞察:集成 PostgreSQL/MySQL
EXPLAIN
可视化分析 - 动态缓存建议:基于访问模式推荐二级缓存最佳配置
开发者友好
- 零侵入接入:Spring Boot Starter 开箱即用
- 多维度报告:控制台/邮件/钉钉多维告警(支持自定义阈值)
一个基于 MyBatis 插件和 JSqlParser 解析器的 SQL 分析优化 Starter,提供 SQL 性能分析、优化建议、多数据库兼容支持,并支持同步/异步分析模式,采样率,自定义报告输出形式和自定义分析规则。
- ✅ SQL 性能分析 - 自动分析执行的 SQL 语句
- ✅ 优化建议 - 提供索引、改写等优化建议
- ✅ 多数据库兼容 - 支持 MySQL、Oracle、PostgreSQL 等主流数据库
- ✅ 灵活的分析模式 - 支持同步和异步分析模式
- ✅ 自定义规则 - 可扩展的分析规则配置
- ✅ 自定义报告输出规则 - 可扩展的报告输出。可以发送MQ,输出到日志、邮件、监控系统等
- ✅ 采样率控制 - 避免分析带来的性能开销
- ✅ 轻量无侵入 - 简单配置即可接入现有项目
快速开始
1. 添加依赖
<dependency>
<groupId>io.github.chenjunwenhao</groupId>
<artifactId>mybatis-sql-optimizer-spring-boot-starter</artifactId>
<version>1.2.9</version><!-- 最新版本 -->
</dependency>
添加依赖后 日志打印
2025-04-04 19:53:59 [pool-2-thread-1] INFO com.wuya.mybatis.optimizer.report.DefaultAnalysisReporter -===== SQL分析报告 [MySQL:com.faq.mapper.DictDao.getCity] =====
2025-04-04 19:53:59 [pool-2-thread-1] INFO com.wuya.mybatis.optimizer.report.DefaultAnalysisReporter -SQL: SELECT
think_areas.area_id as id,
think_areas.parent_id as parentId,
think_areas.area_name as label,
think_areas.area_type as type
FROM
think_areas
WHERE
think_areas.parent_id = ?
and think_areas.area_type like '%1%'
or upper(think_areas.area_name) like '%2%'
or Upper(think_areas.area_name) like '%2%'
2025-04-04 19:53:59 [pool-2-thread-1] INFO com.wuya.mybatis.optimizer.report.DefaultAnalysisReporter -执行时间: 625ms
2025-04-04 19:53:59 [pool-2-thread-1] INFO com.wuya.mybatis.optimizer.report.DefaultAnalysisReporter -执行计划:
2025-04-04 19:53:59 [pool-2-thread-1] INFO com.wuya.mybatis.optimizer.report.DefaultAnalysisReporter - filtered: 100.0
2025-04-04 19:53:59 [pool-2-thread-1] INFO com.wuya.mybatis.optimizer.report.DefaultAnalysisReporter - Extra: Using where
2025-04-04 19:53:59 [pool-2-thread-1] INFO com.wuya.mybatis.optimizer.report.DefaultAnalysisReporter - select_type: SIMPLE
2025-04-04 19:53:59 [pool-2-thread-1] INFO com.wuya.mybatis.optimizer.report.DefaultAnalysisReporter - id: 1
2025-04-04 19:53:59 [pool-2-thread-1] INFO com.wuya.mybatis.optimizer.report.DefaultAnalysisReporter - type: ALL
2025-04-04 19:53:59 [pool-2-thread-1] INFO com.wuya.mybatis.optimizer.report.DefaultAnalysisReporter - rows: 3408
2025-04-04 19:53:59 [pool-2-thread-1] INFO com.wuya.mybatis.optimizer.report.DefaultAnalysisReporter - table: think_areas
2025-04-04 19:53:59 [pool-2-thread-1] INFO com.wuya.mybatis.optimizer.report.DefaultAnalysisReporter -优化建议:
2025-04-04 19:53:59 [pool-2-thread-1] INFO com.wuya.mybatis.optimizer.report.DefaultAnalysisReporter - - 检测到全表扫描,建议为表 think_areas 添加索引
2025-04-04 19:53:59 [pool-2-thread-1] INFO com.wuya.mybatis.optimizer.report.DefaultAnalysisReporter - - 索引选择性不足,索引 null 过滤了100.0%数据,建议优化索引或查询条件
2025-04-04 19:53:59 [pool-2-thread-1] INFO com.wuya.mybatis.optimizer.report.DefaultAnalysisReporter - - LIKE条件以通配符开头,无法使用索引
2025-04-04 19:53:59 [pool-2-thread-1] INFO com.wuya.mybatis.optimizer.report.DefaultAnalysisReporter - - 警告: 对列 `AREA_NAME` 使用函数 `UPPER()`,可能导致索引失效。白名单函数: [ABS, FLOOR, COALESCE, CEILING, ROUND, NULLIF]
2025-04-04 19:53:59 [pool-2-thread-1] INFO com.wuya.mybatis.optimizer.report.DefaultAnalysisReporter - - 警告: 对列 `AREA_NAME` 使用函数 `UPPER()`,可能导致索引失效。白名单函数: [ABS, FLOOR, COALESCE, CEILING, ROUND, NULLIF]
2025-04-04 19:53:59 [pool-2-thread-1] INFO com.wuya.mybatis.optimizer.report.DefaultAnalysisReporter - - 全表扫描JOIN操作检测到,考虑添加适当的索