哪种分页方法(Sql Server 2008)具有BEST性能?

dev*_*dev 7 sql-server paging

在Sql Server 2008中,许多选项可用于通过存储过程进行数据库分页.例如,请看这里这里.

选项:

  1. ROW_NUMBER()函数
  2. ROWCOUNT
  3. CURSORS
  4. 临时表
  5. 嵌套的SQL查询
  6. 其他

已知使用ROW_NUMBER()进行分页会出现性能问题:

请注意,哪种分页方法具有最佳性能(对于带JOIN的大型表)?

如果可能,还请提供相关文章的链接.

谢谢.

And*_*mar 3

您必须回答的一个问题是您是否想向最终用户显示总行数。要计算最后一页的页码,您还需要最后一行的编号。

如果您不需要这些信息,临时表是一个不错的选择。您可以选择主键并使用 LIMIT 来检索直到您感兴趣的键。如果您正确执行此操作,典型的用例将仅检索前几页。

如果需要最后页码,可以使用 ROW_NUMBER()。使用临时表不会快得多,因为您不能使用 LIMIT 子句,使得此策略相当于 ROW_NUMBER() 计算。