我正在学习执行计划,并尝试不同的查询并比较它们的性能,结果发现:
SELECT StatisticID
FROM (
SELECT StatisticID, ROW_NUMBER() OVER (ORDER BY StatisticID) AS rn
FROM FTCatalog.Statistic
) AS T
WHERE T.rn <= 1000
ORDER BY rn
SELECT TOP 1000 StatisticID
FROM FTCatalog.Statistic
ORDER BY StatisticID
它们都返回相同的结果集-但是第一个执行速度更快,资源占用更少(至少SSMS告诉我),以下是执行计划:
与SQL Query Plan Explorer的比较: 谁能给我一些有关幕后实际发生情况的信息,以及为什么结果有所不同?如果您还有其他需要,请告诉我。
谢谢,伊瓦达斯。
由于某种原因,SQL Server对于分页查询没有很好的查询重写。在这种常见情况下,计划和估计上的这些差异不应该存在。
—
usr