【发布时间】:2011-05-10 18:31:43
【问题描述】:
这是一个已知问题,但我发现的最佳解决方案是:
SELECT TOP N *
FROM MyTable
ORDER BY Id DESC
我有一张有很多行的表。使用该查询是不可能的,因为它需要很多时间。那么如何在不使用 ORDER BY 的情况下选择最后 N 行呢?
编辑
对不起this one的重复问题
【问题讨论】:
-
最后一个N是什么意思?没有订单,“最后 N”没有多大意义。如果您的意思是“要插入的最后 N 个”,那么您不能依赖 SQL Server 将其提供给您 - 您必须使用 ORDER BY 子句。
-
@Daniel Renshaw:表的最后 N 个没有强制 SQL Server 对所有表进行排序,因为它真的很慢
-
您问题中的查询是最好的方法。如果
id被索引,那么它只会反向扫描该索引并在前 5 行之后停止。如果它没有被索引,那么它需要做一个TOP N排序。这不会比任何其他方式更糟糕。它不会对整个表进行排序(尽管它需要扫描整个表) -
你为什么用使用排序的分区标记答案作为接受的答案?它并不比您的原始查询更好。它所做的一切都为查询增加了细微差别 - 即特定客户的最后 N 个。您的查询不需要任何分区。
标签: sql sql-server performance sql-server-2008