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

mybatis-plus 长sql执行缓慢问题

        说起这个问题,可把我坑苦了,这个问题一共找了两次,第一次是因为一个sql执行缓慢,我来排查原因,先后排除了sql本身的问题,网络问题,项目代码问题,数据库压力问题,最后问题定位在orm框架生成sql和把查询结果组装成po这一过程中,具体是那个地方一直没有确定,耗时一周,后来因为有其他任务,耗不起时间,就暂时搁置了。

        第二次排查这个问题,是因为另一个sql也执行缓慢,同样排除了上文中说的问题,但这次发现一个新的现象,就是sql越长需要的时间也越长,所以问题就划定在orm组装sql这一过程中。

        后来经过不懈努力,我终于找到了问题原因。我们使用mybatis-plus框架,其中有一段代码是这样的

private String getTableName(String sql) {
        Statement statement = null;
        try {
            //注意这一行
            statement = CCJSqlParserUtil.parse(sql);
        } catch (JSQLParserException e) {
            e.printStackTrace();
        }
        TablesNamesFinder tablesNamesFinder = new TablesNamesFinder();
        List<String> tableList = tablesNamesFinder.getTableList(statement);
        if (CollectionUtils.isEmpty(tableList)) {
            return null;
        }
        return tableList.get(0);
    }

        这段代码主要是为了获取sql涉及的数据库表的名字,其中CCJSqlParserUtil.parse(sql)这一句耗时非常严重,在我的场景下需要800ms左右,我的场景是一个sql in查询,in查询本身执行时间20ms左右。
在这里插入图片描述
        我也没有太多的时间和精力从根本排查解决这个问题,所以选择了一个治标不治本的方法,就是尽量减小sql的长度。效果还不错。

        另外这位兄弟跟我的情况差不多,我也记录在这。https://blog.csdn.net/xuanzai666/article/details/134321479


http://www.kler.cn/a/388244.html

相关文章:

  • 从 MySQL 5.7 到 8.0:理解 GROUP BY 的新规则与实战优化20241112
  • windows 11编译安装ffmpeg(包含ffplay)
  • Elasticsearch中什么是倒排索引?
  • [极客大挑战 2019]PHP 1
  • el-input 正则表达式校验输入框不能输入汉字
  • MySQL中存储引擎和数据类型
  • 【前端】Svelte:核心语法和组件基础
  • RabbitMQ — 异步调用
  • 【Webpack配置全解析】打造你的专属构建流程️(4)
  • 【解决】Pico 串流 Unity 开发环境 Preview 黑屏问题
  • 现代化汽车共享:SpringBoot管理系统开发
  • 数据与Python
  • 企业内部知识库搭建工具精选
  • 用js去除变量里的html标签
  • Android gradle下载失败后 解决方案
  • python在车载电子测试方面的应用
  • uniapp—android原生插件开发(1环境准备)
  • 深度学习:微调(Fine-tuning)详解
  • 蓝牙规范系列--属性协议(基础篇)
  • Pytorch学习--神经网络--网络模型的保存与读取
  • Java毕业设计-----基于AIGC的智能客服系统
  • [LInux] 进程地址空间
  • Android 14 SPRD 下拉菜单中增加自动亮度调节按钮
  • 鸿蒙系统:智能设备新时代的技术驱动
  • MySQL:数据类型建表
  • system generator结合高版本matlab的使用