SQL Sever分页查询

发布时间 2023-04-13 17:28:28作者: ashet

由于SQL Server结合Mybatis Plus分页查询耗时过长,简单分页查询用postman测试接口平均2.5s响应时间,手写分页查询后postman测试接口平均100ms响应时间
话不多说,let's do it!


先查总数据量
SELECT COUNT(id) FROM table


再查分页数据
SELECT * FROM ( SELECT TOP ( ? * ? ) row_number ( ) OVER ( ORDER BY id ) AS rownumber, * FROM table) temp_rows WHERE rownumber > ( ? - 1 ) * ?;

first ? 指的是页码 (page),second ? 指的是每页数据量 (size)


写一个分页展示类
@Getter
@Setter
/**
* 拟名MPage是模仿IPage,M意指微软
*/
public class MPage<T> {

   /**
    * 数据
    */
   private List<T> data;

   /**
    * 页码
    */
   private Integer pageNum;

   /**
    * 每页展示数据量
    */
   private Integer pageSize;

   /**
    * 总数据量
    */
   private Integer total;

   public MPage() {
   }

   private MPage(List<T> data, Integer pageNum, Integer pageSize, Integer total) {
       this.data = data;
       this.pageNum = pageNum;
       this.pageSize = pageSize;
       this.total = total;
   }

   public MPage<T> initData(List<T> data, Integer pageNum, Integer pageSize, Integer total){
       return new MPage<>(data, pageNum, pageSize, total);
   }

}

大功告成