优化分页插件pagehelper

在使用Mybatis的PageHelper分页插件时,遇到count查询性能问题。通过分析源代码,发现在特定条件下(如包含group by、distinct、参数?和分组函数)无法简化count查询。特别是对分组函数的判断过于严格,导致包含某些无关分组的函数(如ifnull、convert、format)也会阻止简化。为解决这个问题,建议改进isSimpleCount函数,增加过滤函数列表,从而支持含有字段处理函数的SQL进行简化,提升查询效率。
摘要由CSDN通过智能技术生成

使用mybatis+pagehelper过程中,发现pagehelper中自动生成的count语句性能很差,直接在现在查询外面套了一个count查询,跟踪源代码后定位到生成count的判断处(CountSqlParser.java):

/**
 * 将sql转换为count查询
 *
 * @param select
 */
public void sqlToCount(Select select) {
    SelectBody selectBody = select.getSelectBody();
    // 是否能简化count查询
    if (selectBody instanceof PlainSelect && isSimpleCount((PlainSelect) selectBody)) {
        ((PlainSelect) selectBody).setSelectItems(COUNT_ITEM);
    } else {
        PlainSelect plainSelect = new PlainSelect();
        SubSelect subSelect = new SubSelect();
        subSelect.setSelectBody(selectBody);
        subSelect.setAlias(TABLE_ALIAS);
        plainSelect.setFromItem(subSelect);
        plainSelect.setSelectItems(COUNT_ITEM);
        select.setSelectBody(plainSelect);

    }
}

isSimpleCount函数对当前查询是否可以简化做了判断。

发现有4种情况下,无法简化当前查询

  1. 包含group by

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值