2

我已经实现了两种非常快速的方法来分页至少包含1,000,000记录的大型 MS SQL Server 数据库表,但未能确定任何一种方法的优缺点,将不胜感激:

第一种是运行 SQL 查询并仅返回过滤记录的主键值,指定可能为 100-1000 的 TOP 子句。然后可以将它们放入 Web 服务器上的会话变量中,并通过将主键值的子集提供回服务器来相应地进行分页。

一个积极的方面是记录的过滤只在用户最初执行搜索时发生一次,其次,如果需要,它可以一次翻阅整个记录集一项,例如在即将到来的记录的预览中,等。此方法还提供了一些关于进一步过滤已过滤记录的好处,因为可以通过将主键值列表提供回 SQL Server 来确定可过滤选项 - 例如公共属性、标题、导演等。

第二种选择是通过 SQL Server 执行过滤和分页,提供诸如“每页记录”和“页码”等变量。

这样做的好处是,无需使用用户会话来阻塞 Web 服务器,这些用户会话的大小无疑每个至少 1000 多个字节,从长远来看,这只会随着网站用户数量的增加而导致问题。相比之下,缺点最终是我列出的第一个选项的积极因素,例如无法确定整个记录集的过滤选项,只有一个页面或主键值的子集在 Web 服务器上工作。

鉴于上述情况,每个人的想法是什么,尤其是关于将结果的主键值存储在会话变量、内存、备用选项等方面?

4

1 回答 1

0

我是那种认为数据库时间比 Web 服务器时间更有价值的人。但这是我的方法。在您的情况下,您如何检索数据?您使用 DataSet/DataTables 还是使用强类型容器?为什么不在 Web 服务器端甚至客户端使用 linq 或其他过滤技术?(您可以向用户显示所有记录并使用 javascript 进行过滤)。

于 2013-07-09T17:34:25.847 回答