SQLServer数据库查询分页输出

SQLServer数据库查询分页输出

SQLServer数据库查询分页输出是个常规的数据查询动作,有很简单且性能良好的查询语句可以实现

1、 使用 OFFSET 和 FETCH NEXT(适用于SQL Server 2012及以上版本)

例:

SELECT [column1], [column2], …
FROM [YourTableName]
ORDER BY [YourOrderByColumn]
OFFSET ((@PageIndex – 1) * @PageSize) ROWS
FETCH NEXT @PageSize ROWS ONLY;

— 查询第2页,每页10条记录
SELECT [OrderID], [OrderDate], [CustomerID]
FROM [Orders]
ORDER BY [OrderID]
OFFSET 10 ROWS
FETCH NEXT 10 ROWS ONLY;

2、使用 ROW_NUMBER()(适用于SQL Server 2005及以上版本)

ROW_NUMBER()函数可实现分页功能

例:

WITH PaginationCTE AS (
SELECT
ROW_NUMBER() OVER (ORDER BY [YourOrderByColumn]) AS RowNum,
[YourColumnNames]
FROM
[YourTableName]
)
SELECT
[YourColumnNames]
FROM
PaginationCTE
WHERE
RowNum BETWEEN ((@PageNumber – 1) * @PageSize + 1) AND (@PageNumber * @PageSize);

— 查询第2页,每页10条记录
WITH PaginationCTE AS (
SELECT
ROW_NUMBER() OVER (ORDER BY [OrderID]) AS RowNum,
[OrderID], [OrderDate], [CustomerID]
FROM
[Orders]
)
SELECT
[OrderID], [OrderDate], [CustomerID]
FROM
PaginationCTE
WHERE
RowNum BETWEEN 11 AND 20;

在性能优化上的建议:
索引优化:确保在排序字段和查询条件中使用的列上有适当的索引,以提高查询性能。
避免使用 SELECT *:明确选择需要的列,避免读取不必要的数据。

滚动至顶部