pagehelper / Mybatis-PageHelper

Mybatis通用分页插件
https://mybatis.io
MIT License
12.21k stars 3.13k forks source link

严重BUG,使用sqlserver时,分页查询因为ORDER BY前的空行导致查询缓慢的问题 #821

Open trifolium-x opened 4 months ago

trifolium-x commented 4 months ago

异常模板

image 在使用sqlserver数据库使用方言sqlserver2012的时候,当模板的ORDER BY前有空行的时候查询非常慢以至于很多时候查不出来, 当去掉ORDER BY前面的空行时速度就很正常。现在不知道是Pagehelper还是Mybatis的BUG, 我使用的框架是TkMybatis和Pagehelper的组合。

经过测试,在查询最后一页时触发该问题

Page<xxx> page = PageHelper.startPage(ro.getPageIndex(), ro.getPageSize(),
                totalCount == null)) {
            page.doSelectPage(() -> xxxMapper.getxxx(xxx);
abel533 commented 4 months ago

把最终执行的SQL用mybatis直接的方式或者JDBC的方式测试看看。

trifolium-x commented 4 months ago

@abel533 当我把ORDER BY子句删掉后抛出异常: image

trifolium-x commented 4 months ago

这个错误似乎是正常的,好像sqlserver2012分页的情况下SQL语句必须要有ORDER BY子句

trifolium-x commented 4 months ago

@abel533 经过我的测试,用Mybatis原生拼接分页参数查询没有任何问题。

trifolium-x commented 4 months ago

不知道触发这个情况的机制是什么,在ORDER BY前面添加空行或者删除空行都会大概率触发查询最后一页非常缓慢的问题,查看生成的SQL发现也没有问题,就是非常缓慢,如果不使用PageHelper直接拼接分页参数就不会出现类似问题。

LSL1618 commented 4 months ago

我在自己的项目里测试了一下,无法复现你的问题,查起来都挺快的。

abel533 commented 4 months ago

这种bug只能在你可以复现的环境来定位问题。

trifolium-x commented 4 months ago

能否安排时间一起看一看,或者我加个你的qq群,最近在编写solon相关的代码,我有时间再去调试一番这个问题。