【问题标题】:SQL Server Paging and Holy GrailSQL Server 分页和圣杯
【发布时间】:2012-08-12 05:36:05
【问题描述】:

我正在研究做一些有效的分页,并发现这个链接说“圣杯”是最好的方法。

http://www.sqlservercentral.com/articles/T-SQL/66030/

该表只是用作示例,还是实际上是解决方案的一部分。我的意思是,您将如何使用具有许多连接的表执行此操作,方法相同?有人可以发一个例子吗?

【问题讨论】:

    标签: sql sql-server performance pagination


    【解决方案1】:

    表“[INFORMATION_SCHEMA].columns”仅用作示例。

    对于有很多连接的表,我会使用相同的方法。只要确保你有正确的索引。

    “Holy Grial”解决方案只为您提供分页结果和一个指示行总数的列,没有开销。您可以获取另一个查询的总行数。

    注意文章结论:

    ....这种方法最适合复杂的较小结果集 查询 I/O 是主要瓶颈的地方。杰夫摩登,比索和 这里的其他人指出,对于较大的结果集,I/O 成本 您节省的成本远远超过 CPU 成本。

    【讨论】:

    • 为了获得这种性能提升,ROW_NUMBER() OVER(ORDER BY table_name, column_name) AS seq, ROW_NUMBER() OVER(ORDER BY table_name DESC, column_name desc) 作为 totrows,两个 row_numbers 反向订单是我需要的?
    • 是的。那只是为了减少开销。只需一个查询即可获取分页结果和总行数。示例:“产品”表有 5000 行。我想看第 20 页,有 100 行。那是第 1901 到 2000 行。在同一个查询中使用 ROW_NUMBER() 两次,您可以获得总行数 (5000)。否则,您必须为此编写另一个查询。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    • 2011-11-03
    • 1970-01-01
    • 2011-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多