Cry*_*lue 79 paging performance sql-server-2012
所以,我有一个函数可以返回一些我希望在我的网站上实现分页的记录.有人建议我使用SQL Server 2012中的Offset/Fetch Next来完成此任务.在我们的网站上,我们有一个区域列出了当时的记录总数和您所在的页面.
之前,我正在获取整个记录集,并能够以编程方式构建分页.但是只使用带有FETCH NEXT X ROWS的SQL方法,我只返回X行,所以我不知道我的总记录集是什么以及如何计算我的最小和最大页面.我能告诉你这样做的唯一方法是调用函数两次并在第一次执行行计数,然后使用FETCH NEXT运行第二行.有没有更好的方法不让我运行查询两次?我试图加快性能,而不是减慢速度.
Jam*_*erg 131
我使用COUNT()OVER()方法遇到了一些性能问题.(我不确定它是否是服务器,因为它需要40秒才能返回10条记录然后没有任何问题.)这种技术在所有条件下都能工作,而不必使用COUNT()OVER()并完成一样:
DECLARE
@PageSize INT = 10,
@PageNum INT = 1;
WITH TempResult AS(
SELECT ID, Name
FROM Table
), TempCount AS (
SELECT COUNT(*) AS MaxRows FROM TempResult
)
SELECT *
FROM TempResult, TempCount
ORDER BY TempResult.Name
OFFSET (@PageNum-1)*@PageSize ROWS
FETCH NEXT @PageSize ROWS ONLY
Run Code Online (Sandbox Code Playgroud)
Aar*_*and 101
您可以使用COUNT(*) OVER()...这是一个使用sys.all_objects以下的快速示例:
DECLARE
@PageSize INT = 10,
@PageNum INT = 1;
SELECT
name, object_id,
overall_count = COUNT(*) OVER()
FROM sys.all_objects
ORDER BY name
OFFSET (@PageNum-1)*@PageSize ROWS
FETCH NEXT @PageSize ROWS ONLY;
Run Code Online (Sandbox Code Playgroud)