【问题标题】:What is the best method for paging with datagrid performance?使用数据网格性能进行分页的最佳方法是什么?
【发布时间】:2008-12-21 10:07:32
【问题描述】:

在拥有大量用户的网站上,分页应该用代码或存储过程来处理。如果您使用了缓存,请包括您的成功因素。

【问题讨论】:

    标签: performance datagrid data-paging


    【解决方案1】:

    就个人而言,我从不在 SQL Server 之外对内容进行分页。我在数据库级别执行此操作,就好像您有一百万条记录要分页一样,如果您在应用层检索它并在那里分页,您已经付出了巨大的成本。

    【讨论】:

      【解决方案2】:

      99.9% 的时间,分页应该在您的数据库服务器上完成。但是,存储过程不需要这样做,事实上,许多存储过程解决方案依赖于游标并且效率很低。理想情况下,使用为您的数据库平台量身定制的单个 SQL 语句来仅检索您需要的记录,而不是更多。

      【讨论】:

      • 好吧,我不得不不同意仅仅因为它使用存储过程就更有可能使用游标的观点......但其余的我同意。如果有人要编写糟糕的 SQL,他们会通过任何可用的途径来完成。
      • 同意,“很多”“更有可能”——这只是对认为 SP 一定更快的警告。也许在这个问题的背景下它是严厉的。
      【解决方案3】:

      我会在数据库级别进行。谈到 sql server 2005,我会使用新的 ROW_NUMBER() 函数,看看: Paging SQL Server 2005 Results

      典型的 sql 在哪里:

      SELECT Row_Number() OVER(ORDER BY UserName) As RowID, UserFirstName, UserLastName
      FROM Users
      WHERE RowID Between 0 AND 9
      

      在这里http://aspnet.4guysfromrolla.com/articles/031506-1.aspx,您可以了解它的工作原理并检查 Scott Mitchell 的一个小基准。

      【讨论】:

        【解决方案4】:

        大多数数据库供应商在数据库中提供丰富的分页支持。使用它;-p 请注意,它不必是存储过程来执行此操作(我将搁置一直在运行的存储过程与临时命令的争论)。

        顺便说一句,许多框架会为您高效地执行此操作。例如,在 .NET 3.5(使用 LINQ)中,您可以使用 Skip()Take() 进行分页,在 db 中使用。

        【讨论】:

          【解决方案5】:

          我认为这取决于要分页的记录数。例如,您有 100 条记录要分页,我认为不需要 SQL 分页的东西来执行此操作。我一直在努力记住 KISS 原则和过早优化。

          【讨论】:

            猜你喜欢
            • 2016-05-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-09-18
            • 2011-03-01
            • 1970-01-01
            • 2010-10-17
            相关资源
            最近更新 更多