我已经实现了两种非常快速的方法来分页至少包含1,000,000
记录的大型 MS SQL Server 数据库表,但未能确定任何一种方法的优缺点,将不胜感激:
第一种是运行 SQL 查询并仅返回过滤记录的主键值,指定可能为 100-1000 的 TOP 子句。然后可以将它们放入 Web 服务器上的会话变量中,并通过将主键值的子集提供回服务器来相应地进行分页。
一个积极的方面是记录的过滤只在用户最初执行搜索时发生一次,其次,如果需要,它可以一次翻阅整个记录集一项,例如在即将到来的记录的预览中,等。此方法还提供了一些关于进一步过滤已过滤记录的好处,因为可以通过将主键值列表提供回 SQL Server 来确定可过滤选项 - 例如公共属性、标题、导演等。
第二种选择是通过 SQL Server 执行过滤和分页,提供诸如“每页记录”和“页码”等变量。
这样做的好处是,无需使用用户会话来阻塞 Web 服务器,这些用户会话的大小无疑每个至少 1000 多个字节,从长远来看,这只会随着网站用户数量的增加而导致问题。相比之下,缺点最终是我列出的第一个选项的积极因素,例如无法确定整个记录集的过滤选项,只有一个页面或主键值的子集在 Web 服务器上工作。
鉴于上述情况,每个人的想法是什么,尤其是关于将结果的主键值存储在会话变量、内存、备用选项等方面?