测试机器, 笔记本 win7 cpu i5-4210M 8G内存
测试数据 单表 181w数据
mybatis常用分页组件性能对比
1. RowBounds
![](https://note.youdao.com/yws/res/536533/WEBRESOURCEd4a7664cd71eb04da86c91f72bc67c14)
![](https://note.youdao.com/yws/res/536535/WEBRESOURCEb26b5c458b4a3c6784133fac0835850c)
2. PageHelper
![](https://note.youdao.com/yws/res/536537/WEBRESOURCE9c132181252906f3b0e7c444804f8dfc)
![](https://note.youdao.com/yws/res/536541/WEBRESOURCEe219f0c83c517f5ddf45c352729c9615)
3. 性能对比
|
数据
|
耗时
|
RowBounds
|
180w数据 pageSize=20
<p>50页到100页</p>
</td>
<td>
<p>4分钟</p>
</td>
</tr><tr><td>
<p>RowBounds</p>
</td>
<td>
<p>180w数据 pageSize=200</p>
<p>7000页到7020页</p>
</td>
<td>
<p>1分22秒</p>
</td>
</tr><tr><td>
<p>PageHelper</p>
</td>
<td>
<p>180w数据 pageSize=20</p>
<p>50页到100页</p>
</td>
<td>
<p>1962ms</p>
</td>
</tr><tr><td>
<p>PageHelper</p>
</td>
<td>
<p>180w数据 pageSize=200</p>
<p>7000页到7020页</p>
</td>
<td>
<p>12909ms</p>
</td>
</tr></tbody></table></div><p>jvm 内存消耗如下</p>
PageHelper
![](https://note.youdao.com/yws/res/536561/WEBRESOURCEa3c8836edf1e21259f26c0be68a0caab)
RowBounds
![](https://note.youdao.com/yws/res/536564/WEBRESOURCE0ded8361b3a2b7a2bf5485dc91ea84c0)
3. 原理分析
PageHelper: 物理分页, 通过拦截器加 limit 语句进行分页
RowBounds: 逻辑分页,数据量大的时候压力较大
![](https://note.youdao.com/yws/res/536568/WEBRESOURCE422988844b1fd4c42787706e9e378309)
总结:Mybatis的逻辑分页比较简单,简单来说就是取出所有满足条件的数据,然后舍弃掉前面offset条数据,然后再取剩下的数据的limit条
mybatis3 http://www.mybatis.org/mybatis-3/zh/index.html
pageHelper https://github.com/pagehelper/Mybatis-PageHelper
|