在具有大量用户的站点上,应该在代码中或使用存储过程来处理分页。如果您使用了缓存,请包括您的成功因素。
5 回答
就个人而言,我从不在 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 原则和过早优化。