代码之家  ›  专栏  ›  技术社区  ›  Tommy Jakobsen

ASP.NET,SQL 2005“分页”

  •  2
  • Tommy Jakobsen  · 技术社区  · 16 年前

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

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

    总共有大约50万行。

    当我通过每个订阅号码“翻页”时,表格中会填入订阅人的详细信息。我应该在SQL Server上使用什么方法?

    使用row_number()函数似乎有点过分,因为它必须对所有约500.000行进行编号(我猜是吧?),那么还有什么其他可能的解决方案呢?

    事先谢谢!

    3 回复  |  直到 16 年前
        1
  •  3
  •   AndyMcKenna    16 年前

    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与所需行数的参数进行子初始化。

        2
  •  0
  •   Raj More    16 年前

    汤米,如果你的用户有时间以每行一页的速度翻页50万行,那么他/她是独一无二的。

    我想我要说的是,你可以提供更好的用户体验。什么时候-页面太多?构建搜索功能。

        3
  •  0
  •   Community CDub    8 年前

    有两种可能的解决方法(为此,从201开始,共100页):

    SQL

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

    解决并发冲突

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

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

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

    :因为OP不按ID排序,所以唯一的解决方案是 行数() ,这是我在结尾处写的条款。

    在这种情况下,表没有索引,因此请参见 here 有关如何索引以提高查询性能的想法。