2

这是对问题的跟进: ASP.NET next/previous button to display single row in a form

正如上面页面上所说,页面上有一个上一个/下一个按钮,一次检索一行。

总共有约 500,000 行。

当我“翻阅”每个订阅号时,表格中会填满订阅者的详细信息。我应该在 SQL 服务器上使用什么方法?

使用 ROW_NUMBER() 函数似乎有点矫枉过正,因为它必须对所有 ~500.000 行进行编号(我猜?),那么还有哪些其他可能的解决方案?

提前致谢!

4

3 回答 3

3

ROW_NUMBER() 可能是您的最佳选择。

从这篇 MSDN 文章:http: //msdn.microsoft.com/en-us/library/ms186734.aspx

WITH OrderedOrders AS
(
    SELECT SalesOrderID, OrderDate,
    ROW_NUMBER() OVER (ORDER BY OrderDate) AS 'RowNumber'
    FROM Sales.SalesOrderHeader 
) 
SELECT * 
FROM OrderedOrders 
WHERE RowNumber BETWEEN 50 AND 60;

只需将 50 和 60 替换为所需行号的参数即可。

于 2009-06-29T15:07:54.690 回答
0

有两种可能的解决方法(为此,使用 201 开头,100 页):

SQL

SELECT TOP 100 * FROM MyTable WHERE ID > 200 ORDER BY ID

LINQ 到 SQL

var MyRows = (from t in db.Table 
              order by t.ID ascending
              select t).Skip(200).Take(100)

如果您的 ID 字段具有聚集索引,请使用前者。如果不是,这两者将花费相同的时间(LINQ 返回 500,000 行,然后跳过,然后占用)。

如果您正在按不是 ID 的内容进行排序并且您已将其编入索引,请使用ROW_NUMBER().

编辑:因为 OP 不是按 ID 排序的,所以唯一的解决方案是ROW_NUMBER(),这是我放在最后的子句。

在这种情况下,表没有被索引,因此请参阅此处了解如何索引以提高查询性能的想法。

于 2009-06-29T15:11:16.367 回答
0

Tommy,如果您的用户有时间以每行一页的方式浏览 500,000 行,那么他/她就是独一无二的。

我想我在这里要说的是,您也许能够提供更好的用户体验。什么时候 - 页面太多?构建搜索功能。

于 2009-06-29T15:12:09.970 回答