哪个选项更快,为什么?
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秒)。
答案 0 :(得分:2)
在实践中,我发现count over
非常慢,特别是对于复杂的查询。更不用说你现在已经计算了结果集中的每一行。
如果您动态生成查询,首先执行select count(*)
(使用所有过滤器等)然后执行您想要的实际选择会快得多。
我不确定你是否可以依赖@@ROWCOUNT
在所有情况下都是正确的。例如,如果您向查询添加分页等,它会返回什么?我希望它会返回返回的行数(即页面大小)而不是总数。