当前位置: 首页 > news >正文

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/MySQLEXPLAIN可视化分析
  • 动态缓存建议:基于访问模式推荐二级缓存最佳配置

开发者友好

  • 零侵入接入: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操作检测到,考虑添加适当的索

http://www.dtcms.com/a/111945.html

相关文章:

  • 学透Spring Boot — 009. Spring Boot的四种 Http 客户端
  • 科技赋能安居梦:中建海龙以模块化革新重塑城市更新范式
  • 多输入多输出 | Matlab实现BO-GRU贝叶斯优化门控循环单元多输入多输出预测
  • 图解AUTOSAR_SWS_LINStateManager
  • prism WPF 模块
  • #SVA语法滴水穿石# (003)关于 sequence 和 property 的区别和联系
  • Mysql 中有哪些日志结构?
  • LeetCode 687 -- 二叉树
  • HTML5+CSS3+JS小实例:带滑动指示器的导航图标
  • 开源且完全没有审核限制的大型语言模型的概述
  • 电力载波单灯控制器:智能照明的关键技术
  • AQS 等待队列中的线程自旋多少次后挂起?
  • 为PXIe控制器配置NI Linux实时操作系统安装软件
  • #python项目生成exe相关了解
  • C++20新增内容
  • 前端页面鼠标移动监控(鼠标运动、鼠标监控)鼠标节流处理、throttle、限制触发频率(setTimeout、clearInterval)
  • 表结构数据的基本特征、获取、加工与使用
  • Java 状态模式 详解
  • 金融机构开源软件生命周期管理实务
  • 模组COF受损制程排查验证及改善
  • 从文本到多模态:如何将RAG扩展为支持图像+文本检索的增强生成系统?
  • 基于 docker 的 Xinference 全流程部署指南
  • shell语言替换脚本、填补整个命令行
  • 知识考量码【蓝桥】
  • leetcode-代码随想录-链表-翻转链表
  • 框架PasteForm实际开发案例,换个口味显示数据,支持echarts,只需要标记几个特性即可在管理端显示(2)
  • Python办公自动化(2)对wordpdf的操作
  • 青少年编程与数学 02-015 大学数学知识点 04课题、微积分
  • 如何判断多个点组成的3维面不是平的,如果不是平的,如何拆分成多个平面
  • 二叉树 递归