大家都知道,Mysql分页都会使用count(1)查询统计总数时,PageHelper 插件是在我们的查询语句的基础上嵌套一层,如:
SELECT COUNT(*) FROM (主sql)
在DB数据量小的时候,效率非常快,但数据量变大之后, 会越来越慢。。
优化SQL
增加手写 count 查询支持
增加countSuffixcount 查询后缀配置参数,该参数是针对PageInterceptor配置的,默认值为_COUNT。
分页插件会优先通过当前查询的 msId +countSuffix查找手写的分页查询。
如果存在就使用手写的 count 查询,如果不存在,仍然使用之前的方式自动创建 count 查询。
例如,如果存在下面两个查询:
- 改写业务SQL
<select id="queryList_COUNT" parameterType="map" resultType="Long"> SELECT COUNT(DISTINCT id) t_comment </select> <select id="queryList" parameterType="map" resultType="xxxx"> SELECT name,type from t_comment </select>
上面方法执行输出的部分日志如下:
-
改善之后的SQL, 效率提高了许多!