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 *:明确选择需要的列,避免读取不必要的数据。