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.****.net/xuanzai666/article/details/134321479

上一篇:数据库基础(11) . SQL脚本


下一篇:golang分布式缓存项目 Day2