在使用顶行过滤器后如何从 rowcount 获取表的所有行数

Nit*_*mar 0 sql t-sql sql-server sqlperformance sql-server-2017

我的数据库中有一个巨大的表和一个访问它的存储过程,它需要分页。

为了实现这一目标,我想要表的总记录,为此,我面临性能问题,因为为此我需要运行此查询两次:

  • 第一次统计所有记录
  • 其次,当我需要选择该页面范围中的记录时

有什么方法可以避免第一个查询来获取总计数,而不是使用行计数或其他东西?

mar*_*c_s 5

一种方法是这样的:

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;
Run Code Online (Sandbox Code Playgroud)

使用OFFSET / FETCH,您只检索一页数据 - 并且COUNT(*) OVER()将为您提供表中行的总数 - 所有这些都在单个查询中