【发布时间】:2008-12-21 10:07:32
【问题描述】:
在拥有大量用户的网站上,分页应该用代码或存储过程来处理。如果您使用了缓存,请包括您的成功因素。
【问题讨论】:
标签: performance datagrid data-paging
在拥有大量用户的网站上,分页应该用代码或存储过程来处理。如果您使用了缓存,请包括您的成功因素。
【问题讨论】:
标签: performance datagrid data-paging
就个人而言,我从不在 SQL Server 之外对内容进行分页。我在数据库级别执行此操作,就好像您有一百万条记录要分页一样,如果您在应用层检索它并在那里分页,您已经付出了巨大的成本。
【讨论】:
99.9% 的时间,分页应该在您的数据库服务器上完成。但是,存储过程不需要这样做,事实上,许多存储过程解决方案依赖于游标并且效率很低。理想情况下,使用为您的数据库平台量身定制的单个 SQL 语句来仅检索您需要的记录,而不是更多。
【讨论】:
我会在数据库级别进行。谈到 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 的一个小基准。
【讨论】:
大多数数据库供应商在数据库中提供丰富的分页支持。使用它;-p 请注意,它不必是存储过程来执行此操作(我将搁置一直在运行的存储过程与临时命令的争论)。
顺便说一句,许多框架也会为您高效地执行此操作。例如,在 .NET 3.5(使用 LINQ)中,您可以使用 Skip() 和 Take() 进行分页,在 db 中使用。
【讨论】:
我认为这取决于要分页的记录数。例如,您有 100 条记录要分页,我认为不需要 SQL 分页的东西来执行此操作。我一直在努力记住 KISS 原则和过早优化。
【讨论】: