问题描述
我的数据库中有一个巨大的表和一个访问它的存储过程,它需要分页。
为了实现这一点,我想要表的总记录,为此,我面临性能问题,因为为此我需要运行此查询两次:
有什么办法可以避免第一个查询来获取总计数,而不是使用行计数或其他方法?
解决方法
一种方法是这样的:
SELECT
(your list of columns),COUNT(*) OVER ()
FROM
dbo.YourTable
ORDER BY
(whatever column you want to order by)
OFFSET x ROWS FETCH NEXT y ROWS ONLY;
使用 OFFSET / FETCH
,您只检索一页数据 - 而 COUNT(*) OVER()
将为您提供表中的总行数 - 所有在单个查询中