使用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种情况下,无法简化当前查询
-
包含group by