SQL server 分页实现

分页实现:Offset-Fetch

分页实现的方法又多了一种,在SQL Server 2012版本中,TSQL在Order By子句中新增 Offset-Fetch子句,用于从有序的结果集中,跳过一定数量的数据行,获取指定数量的数据行,从而达到数据行分页的目的。经过测试,从逻辑读取数量和响应的时间消耗来测评,使用Offset-Fetch实现的分页方式,比Row_Number()方式性能要高很多。

Offset-Fetch子句要求结果集是有序的,因此,只能用于order by 子句中,语法如下:

ORDER BY order_by_expression [ ASC | DESC ]  [ ,...n ] [  ]
 ::=
{ 
    OFFSET { integer_constant | offset_row_count_expression } ROWS
    [ FETCH NEXT {integer_constant | fetch_row_count_expression } ROWS ONLY ]
}

使用 OFFSET-FETCH 中的限制

  • ORDER BY 是使用 OFFSET 和 FETCH 子句所必需的。
  • Offset子句:用于指定跳过(Skip)的数据行;
  • Fetch子句:该子句在Offset子句之后执行,表示在跳过(Sikp)指定数量的数据行之后,返回一定数据量的数据行;
  • 执行顺序:Offset子句必须在Order By 子句之后执行,Fetch子句必须在Offset子句之后执行;
  • TOP 不能在同一个查询表达式中与 OFFSET 和 FETCH 一起使用。

示例

  • 示例 1: 从排序的结果集中跳过前 10 行并且返回剩余行。
SELECT First Name + ' ' + Last Name 
FROM Employees 
ORDER BY First Name 
  OFFSET 10 ROWS;
  • 示例 2: 从排序的结果集中跳过前 10 行并且返回接下来的 5 行。
SELECT First Name + ' ' + Last Name 
FROM Employees 
ORDER BY First Name 
  OFFSET 10 ROWS 
  FETCH NEXT 5 ROWS ONLY;

分页实现的思路:

在分页实现中,使用Order By子句,按照指定的columns对结果集进行排序;

  • 使用Offset子句跳过前N页:

Offset (@PageIndex-1)*@RowsPerPage rows;

-使用Fetch子句呈现当前Page:

Fetch next @RowsPerPage rows only;

你可能感兴趣的:(SQL server 分页实现)