获取查询返回的总行数

时间:2013-12-02 10:48:49

标签: sql-server sql-server-2008 sql-server-2008-r2

哪个选项更快,为什么?

SELECT
    COUNT(1) OVER (PARTITION BY 1), -- Option 1
    ROW_NUMBER() OVER    (    ORDER BY ac.[dateupdated] DESC) AS RowNum,
FROM MyTable ac      
WHERE ac.[idstatus] = @idstatus AND ac.[idtype] = @idtype

SET @TotalRecords = @@ROWCOUNT -- Option 2

这个想法是在DEV中,2选项之间的差异是1秒,但在PROD中,两个选项都非常接近0(0.03秒)。

1 个答案:

答案 0 :(得分:2)

在实践中,我发现count over非常慢,特别是对于复杂的查询。更不用说你现在已经计算了结果集中的每一行。

如果您动态生成查询,首先执行select count(*)(使用所有过滤器等)然后执行您想要的实际选择会快得多。

我不确定你是否可以依赖@@ROWCOUNT在所有情况下都是正确的。例如,如果您向查询添加分页等,它会返回什么?我希望它会返回返回的行数(即页面大小)而不是总数。