【发布时间】:2013-12-02 10:48:49
【问题描述】:
哪个选项更快,为什么?
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 秒)。
【问题讨论】:
-
我希望@@ROWCOUNT 总是更快,因为它是由任何赋值(包括你的选择)设置的,即使它没有被读取,它是一个存储在服务器内存。如果这是较慢的选择,我会大吃一惊。至于生产中的行为,SQL服务器可以简单地根据各种统计数据决定缓存这个查询的结果是微不足道的,所以它很可能一直返回缓存的结果,更不用说它可以优化查询计划随意。但话又说回来,有什么问题?您只是好奇还是试图解决问题?
标签: sql-server sql-server-2008 sql-server-2008-r2