Springboot用pagehelper分页插件查询Oracle的速度比较慢的解决办法

pagehelper分页插件查询数据的时候,会将你mybatis中的sql在包一层分页,最后为:

SELECT * FROM ( SELECT TMP_PAGE.*, ROWNUM PAGEHELPER_ROW_ID FROM ( SELECT * FROM 你的sql表 ) TMP_PAGE) WHERE PAGEHELPER_ROW_ID <= 10 AND PAGEHELPER_ROW_ID > 0

慢的原因就是后面PAGEHELPER_ROW_ID参数的位置。

解决办法,在application.properties中配置:

pagehelper.helperDialect=oracle9i

你再次打印sql,会变成如下格式:

SELECT * FROM ( SELECT TMP_PAGE.*, ROWNUM PAGEHELPER_ROW_ID FROM ( SELECT * FROM 你的sql表) TMP_PAGE WHERE ROWNUM <= 10 ) WHERE PAGEHELPER_ROW_ID > 0 

发现没有,PAGEHELPER_ROW_ID位置发生了变化,这样速度就明显提升了。

另springboot打印sql日志是:

mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

 

另还有一个地方可以优化

如果数据实在太多,可以重写一个查询总数的sql,只需要将之前的<select>语句重写拷贝一个,将id改成之前的名称+_COUNT,pagehelper会被自动扫描到,当查询总数的时候会直接查询你写的这个,具体代码如下:

<select id="selectList_COUNT" parameterType="java.util.HashMap" resultType="Long">
  SELECT COUNT(1) FROM TABLE
</select>
正在加载评论...