最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MyBatisPlus如何優(yōu)化千萬(wàn)級(jí)數(shù)據(jù)的CRUD

 更新時(shí)間:2025年06月26日 16:23:18   作者:天天摸魚(yú)的java工程師  
最近負(fù)責(zé)的一個(gè)項(xiàng)目,數(shù)據(jù)庫(kù)表量級(jí)破千萬(wàn),每次執(zhí)行 CRUD 都像走鋼絲,稍有不慎就引起數(shù)據(jù)庫(kù)報(bào)警,本文就結(jié)合這個(gè)項(xiàng)目的實(shí)戰(zhàn)經(jīng)驗(yàn),聊聊 MyBatis Plus在千萬(wàn)級(jí)數(shù)據(jù)場(chǎng)景下如何優(yōu)化 CRUD

背景

做 Java 開(kāi)發(fā) 8 年,接觸過(guò) Hibernate、JPA、MyBatis,到現(xiàn)在主力框架 MyBatis Plus(簡(jiǎn)稱 MP)。一路踩坑無(wú)數(shù),從最初寫(xiě)死 SQL 到現(xiàn)在用 Lambda 鏈?zhǔn)讲僮?,感觸最深的是:CRUD 看似簡(jiǎn)單,數(shù)據(jù)量一大,性能問(wèn)題就來(lái)了。

最近負(fù)責(zé)的一個(gè)項(xiàng)目,數(shù)據(jù)庫(kù)表量級(jí)破千萬(wàn),每次執(zhí)行 CRUD 都像走鋼絲,稍有不慎就引起數(shù)據(jù)庫(kù)報(bào)警。本文就結(jié)合這個(gè)項(xiàng)目的實(shí)戰(zhàn)經(jīng)驗(yàn),聊聊 MyBatis Plus 在千萬(wàn)級(jí)數(shù)據(jù)場(chǎng)景下如何優(yōu)化 CRUD 操作。

一、MyBatis Plus 簡(jiǎn)介

MP 是 MyBatis 的增強(qiáng)工具,主打“無(wú)侵入、低門(mén)檻、強(qiáng)增強(qiáng)”,提供了一整套優(yōu)雅的 CRUD 封裝,尤其適合中后臺(tái)系統(tǒng)的開(kāi)發(fā)。

但性能優(yōu)化這件事,MP 提供了鉤子,還得靠我們自己去掌握底層邏輯與場(chǎng)景判斷。

二、千萬(wàn)級(jí)數(shù)據(jù)的挑戰(zhàn)

當(dāng)數(shù)據(jù)達(dá)到千萬(wàn)級(jí)時(shí),常見(jiàn)的問(wèn)題有:

  • 查詢慢、分頁(yè)卡頓
  • 更新/刪除誤操作影響大
  • 數(shù)據(jù)遷移困難
  • 索引策略不合理
  • 樂(lè)觀鎖/悲觀鎖未啟用帶來(lái)并發(fā)問(wèn)題

三、優(yōu)化 CRUD 的關(guān)鍵策略

下面我從 增、刪、改、查 四個(gè)維度,結(jié)合 MP 的用法,逐一拆解優(yōu)化策略。

1. 查詢優(yōu)化(Select)

使用分頁(yè)插件 + 索引優(yōu)化

Page<User> page = new Page<>(1, 10);
IPage<User> result = userMapper.selectPage(page, new QueryWrapper<User>()
        .eq("status", "active")
        .orderByDesc("create_time"));

優(yōu)化點(diǎn):

  • 創(chuàng)建復(fù)合索引 (status, create_time),避免文件排序
  • 設(shè)置合理的 limit 范圍,避開(kāi)深分頁(yè)(推薦游標(biāo)分頁(yè))

游標(biāo)分頁(yè)(Keyset Pagination)案例:

QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.lt("id", lastId)
       .orderByDesc("id")
       .last("limit 100");

List<User> users = userMapper.selectList(wrapper);

比傳統(tǒng) OFFSET 分頁(yè)快得多,適合批量導(dǎo)出或加載。

2. 插入優(yōu)化(Insert)

批量插入代替單條插入

List<User> userList = new ArrayList<>();
for (int i = 0; i < 1000; i++) {
    userList.add(new User("user" + i));
}
userMapper.insertBatchSomeColumn(userList); // 需自定義方法或 MyBatis 擴(kuò)展

建議:

  • 單次批量插入控制在 1000 條以內(nèi),避免 SQL 超長(zhǎng)
  • 使用原生 JDBC 批處理,性能更優(yōu)

3. 更新優(yōu)化(Update)

避免全表更新

錯(cuò)誤:

userMapper.update(null, new UpdateWrapper<User>().set("status", "inactive"));

優(yōu)化:

UpdateWrapper<User> wrapper = new UpdateWrapper<>();
wrapper.eq("status", "active");
wrapper.set("status", "inactive");
userMapper.update(null, wrapper);

永遠(yuǎn)記住:Update 要加條件!

樂(lè)觀鎖控制并發(fā)更新

@TableField(fill = FieldFill.UPDATE)
@Version
private Integer version;
user.setVersion(3);
userMapper.updateById(user); // MP 會(huì)自動(dòng)加 version 判斷

4. 刪除優(yōu)化(Delete)

邏輯刪除替代物理刪除

@TableLogic
private Integer isDeleted;
userMapper.deleteById(123L); // 實(shí)際執(zhí)行的是 UPDATE 操作

邏輯刪除的優(yōu)勢(shì):

  • 避免誤刪
  • 保留數(shù)據(jù)審計(jì)
  • 與回收站機(jī)制兼容

注意:邏輯刪除字段要加索引!

四、批處理與異步處理

在千萬(wàn)級(jí)數(shù)據(jù)場(chǎng)景,批處理 + 異步化 是性能優(yōu)化的核心手段:

  • 使用 Stream 分批處理大數(shù)據(jù)集合
  • 配合 Spring Batch 或自定義線程池實(shí)現(xiàn)異步任務(wù)
  • 使用定時(shí)任務(wù)(如 XXL-JOB)分時(shí)段處理數(shù)據(jù)

五、數(shù)據(jù)庫(kù)層面的優(yōu)化建議

  • 合理建索引(避免過(guò)多/重復(fù)索引)
  • 垂直/水平分表(ShardingSphere、MyCat)
  • 使用中間件緩存熱點(diǎn)數(shù)據(jù)(Redis)
  • 慎用視圖和子查詢,優(yōu)先考慮 JOIN 重構(gòu)

六、總結(jié):CRUD 優(yōu)化是一場(chǎng)系統(tǒng)工程

MyBatis Plus 提供了優(yōu)雅的接口,但數(shù)據(jù)量上來(lái)之后,框架只是工具,根本還在底層 SQL 和設(shè)計(jì)策略上。

作為一個(gè)寫(xiě)了 8 年 Java 的程序員,我最大的體會(huì)是:

性能不是調(diào)出來(lái)的,是設(shè)計(jì)出來(lái)的。

合理建模 + 規(guī)范使用 MP + 數(shù)據(jù)庫(kù)調(diào)優(yōu),才能讓你的系統(tǒng)在千萬(wàn)級(jí)數(shù)據(jù)面前從容應(yīng)對(duì)。

到此這篇關(guān)于MyBatisPlus如何優(yōu)化千萬(wàn)級(jí)數(shù)據(jù)的CRUD的文章就介紹到這了,更多相關(guān)MyBatisPlus優(yōu)化數(shù)據(jù)CRUD內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot之瘦身部署問(wèn)題

    SpringBoot之瘦身部署問(wèn)題

    這篇文章主要介紹了SpringBoot之瘦身部署問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • SpringBoot實(shí)現(xiàn)過(guò)濾器、攔截器與切片的實(shí)現(xiàn)和區(qū)別

    SpringBoot實(shí)現(xiàn)過(guò)濾器、攔截器與切片的實(shí)現(xiàn)和區(qū)別

    本文詳細(xì)介紹了使用過(guò)濾器、攔截器與切片實(shí)現(xiàn)每個(gè)請(qǐng)求耗時(shí)的統(tǒng)計(jì),并比較三者的區(qū)別與聯(lián)系,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • Spring Boot啟動(dòng)過(guò)程(五)之Springboot內(nèi)嵌Tomcat對(duì)象的start教程詳解

    Spring Boot啟動(dòng)過(guò)程(五)之Springboot內(nèi)嵌Tomcat對(duì)象的start教程詳解

    這篇文章主要介紹了Spring Boot啟動(dòng)過(guò)程(五)之Springboot內(nèi)嵌Tomcat對(duì)象的start的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • 解決idea每次新建項(xiàng)目都需要重新指定maven目錄

    解決idea每次新建項(xiàng)目都需要重新指定maven目錄

    這篇文章主要介紹了解決idea每次新建項(xiàng)目都需要配置maven,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 詳解Java Bellman-Ford算法原理及實(shí)現(xiàn)

    詳解Java Bellman-Ford算法原理及實(shí)現(xiàn)

    Bellman-Ford算法與Dijkstra算法類似,都是以松弛操作作為基礎(chǔ),Bellman-Ford算法是對(duì)所有邊都進(jìn)行松弛操作,本文將詳解Bellman-Ford算法原理及實(shí)現(xiàn),感興趣的可以了解一下
    2022-07-07
  • java利用mybatis攔截器統(tǒng)計(jì)sql執(zhí)行時(shí)間示例

    java利用mybatis攔截器統(tǒng)計(jì)sql執(zhí)行時(shí)間示例

    這篇文章主要介紹了java利用mybatis攔截器統(tǒng)計(jì)sql執(zhí)行時(shí)間示例,該攔截器攔截mybatis的query和update操作,能統(tǒng)計(jì)sql執(zhí)行時(shí)間
    2014-03-03
  • java 通過(guò)cmd 調(diào)用命令啟動(dòng)tomcat的操作

    java 通過(guò)cmd 調(diào)用命令啟動(dòng)tomcat的操作

    這篇文章主要介紹了java 通過(guò)cmd 調(diào)用命令啟動(dòng)tomcat的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • 基于Java實(shí)現(xiàn)Actor模型

    基于Java實(shí)現(xiàn)Actor模型

    Actor模型是一種常見(jiàn)的并發(fā)模型,與最常見(jiàn)的并發(fā)模型—共享內(nèi)存(同步鎖)不同,它將程序分為許多獨(dú)立的計(jì)算單元—Actor,文中有詳細(xì)的代碼示例,感興趣的同學(xué)可以參考閱讀
    2023-05-05
  • Spring-Boot框架初步搭建

    Spring-Boot框架初步搭建

    本篇文章主要介紹了Spring-Boot框架初步搭建,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-03-03
  • Java泛型及類型校驗(yàn)的應(yīng)用

    Java泛型及類型校驗(yàn)的應(yīng)用

    泛型(Generics)是編程語(yǔ)言中的一種類型參數(shù)化機(jī)制,它允許在定義類、接口或方法時(shí)使用類型參數(shù),本文給大家介紹Java泛型及類型校驗(yàn)的相關(guān)知識(shí),感興趣的朋友跟隨小編一起看看吧
    2026-03-03

最新評(píng)論

宝丰县| 丰台区| 甘孜县| 乡城县| 聊城市| 温州市| 连江县| 贵阳市| 桂林市| 中方县| 延庆县| 怀安县| 唐山市| 金沙县| 句容市| 府谷县| 长沙市| 洪洞县| 申扎县| 栾川县| 循化| 揭东县| 凤城市| 德昌县| 河津市| 壤塘县| 迁西县| 尤溪县| 日喀则市| 高唐县| 习水县| 读书| 昌乐县| 伊金霍洛旗| 韩城市| 漾濞| 永和县| 巴林左旗| 保靖县| 保康县| 佛山市|