news 2026/10/11 7:28:48

HoRain云--MyBatis与MySQL性能优化实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HoRain云--MyBatis与MySQL性能优化实战

ORM框架中,MyBatis因灵活SQL而受欢迎。但SQL写不好,性能会急剧下降。本文总结MyBatis和MySQL优化技巧。

一、MyBatis核心

<select id="selectUser" resultType="User"> SELECT id, name, age FROM user WHERE id = #{id} </select>

#{}预编译,${}拼接有SQL注入风险。

二、动态SQL

<select id="search"> SELECT * FROM user <where> <if test="name != null"> AND name LIKE CONCAT('%', #{name}, '%') </if> <if test="age != null"> AND age = #{age} </if> </where> </select>

三、一级二级缓存

  • 一级缓存:SqlSession级别,默认开启

  • 二级缓存:Mapper级别,需<cache/>

<cache eviction="LRU" flushInterval="60000" size="512"/>

注意:分布式环境慎用二级缓存。

四、分页优化

使用PageHelper:

PageHelper.startPage(1, 10); List<User> users = userMapper.selectAll(); PageInfo<User> pageInfo = new PageInfo<>(users);

深分页优化:

-- 慢 SELECT * FROM user LIMIT 1000000, 10; -- 快:使用上次最大id SELECT * FROM user WHERE id > 1000000 LIMIT 10;

五、索引优化

  • 最左前缀原则

  • 覆盖索引

  • 避免索引失效:函数、类型转换、前导模糊

  • 使用EXPLAIN分析

EXPLAIN SELECT * FROM user WHERE name = 'Tom';

六、SQL优化技巧

  1. 避免SELECT *

  2. 小表驱动大表

  3. 用JOIN代替子查询

  4. 批量插入用INSERT INTO ... VALUES (...), (...)

  5. 更新用主键

  6. 避免大事务

七、连接池

HikariCP配置:

spring: datasource: hikari: maximum-pool-size: 20 minimum-idle: 5 connection-timeout: 30000 idle-timeout: 600000 max-lifetime: 1800000

八、分库分表

  • 垂直拆分:按业务

  • 水平拆分:按数据

  • 中间件:ShardingSphere、MyCat

spring: shardingsphere: rules: sharding: tables: t_order: actual-data-nodes: db$->{0..1}.t_order$->{0..1} table-strategy: standard: sharding-column: order_id sharding-algorithm-name: inline

九、实战案例

某查询从3秒优化到50ms:

  • 原SQL:SELECT * FROM order WHERE DATE(create_time) = '2024-01-01'

  • 问题:函数导致索引失效

  • 优化:WHERE create_time >= '2024-01-01' AND create_time < '2024-01-02'

  • 添加联合索引(create_time, status)

十、总结

MyBatis优化核心是SQL和索引。掌握EXPLAIN、连接池、分库分表,能应对海量数据场景。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/11 7:25:53

百度网盘下不动大视频?2026实测PanDownload速度直接超越夸克

很多人在遇到文件提取速度变慢的时候&#xff0c;总觉得是不是平台网络通道出了故障。其实只要我们冷静下来做个细致的排查&#xff0c;就会发现很多问题根本不在云端&#xff0c;而是藏在我们自己的手机或电脑系统深处。 为了验证不同系统设置对数据传输的影响&#xff0c;我…

作者头像 李华
网站建设 2026/10/11 7:21:56

LeetCode 543:二叉树直径的JavaScript递归解法详解

先问一个问题&#xff1a;刷LeetCode的时候&#xff0c;你是“看题五分钟、看答案两小时”的类型&#xff0c;还是那种把每道题当成一次底层逻辑训练、非得把递归调用栈在脑子里跑完才肯罢休的类型&#xff1f;实话讲&#xff0c;第543题《二叉树的直径》属于前者看起来很简单、…

作者头像 李华
网站建设 2026/10/11 7:21:47

企业招聘管理系统(ATS候选人追踪系统)

博主介绍&#xff1a; 所有项目都配有从入门到精通的安装教程&#xff0c;可二开&#xff0c;提供核心代码讲解&#xff0c;项目指导。 项目配有对应开发文档、解析等 项目都录了发布和功能操作演示视频&#xff1b;项目的界面和功能都可以定制&#xff0c;包安装运行&#xff…

作者头像 李华
网站建设 2026/10/11 7:21:32

第122篇 Activity 启动模式:standard 到 singleInstance

上一节讲生命周期,这一节讲"Activity 是怎么被放进栈里的"。启动模式是 Android 框架层里最容易出玄学 bug 的一块——因为它的行为由"系统、任务栈、launchMode、Intent flags 四者共同决定",只讲 launchMode 的四个枚举值,等于只讲了四分之一。标题说…

作者头像 李华
网站建设 2026/10/11 7:20:05

Windows 上获取最新 FFmpeg 完整构建与配置指南

简介&#xff1a;这份资源面向需要在 Windows 平台使用 FFmpeg 的开发者、运维人员与内容创作者&#xff0c;提供最新版 FFmpeg 的静态编译包&#xff0c;解决音视频转码、剪辑、流化等场景下的工具获取与环境搭建问题。压缩包共 44 个文件&#xff0c;以 30 个 html 文档、3 个…

作者头像 李华