7

在 Sql Server 2008 中,许多选项可用于通过存储过程进行数据库分页。例如,请参见此处此处

选项:

  1. ROW_NUMBER() 函数
  2. 行数
  3. 光标
  4. 临时表
  5. 嵌套 SQL 查询
  6. 其他

已知使用 ROW_NUMBER() 进行分页存在性能问题

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

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

谢谢你。

4

2 回答 2

3

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

如果您可以不用这些信息,那么临时表是一个不错的选择。您可以选择 pirmary 密钥并使用 LIMIT 检索您感兴趣的密钥。如果您正确执行此操作,典型的用例将只检索前几页。

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

于 2009-07-03T11:36:12.697 回答
0

我们可以使用以下查询获得行数。

WITH data AS
(
      SELECT ROW_NUMBER() OVER (order by memberid ) AS rowid, memberid 
      FROM Customer
)
SELECT *, (select count(*) from data) AS TotalCount 
FROM data 
WHERE rowid > 20 AND  rowid <= 30
于 2011-04-22T11:18:00.167 回答