我已经实现了两种非常快速的方式来分页大型MS SQL Server数据库表,其中至少包含1,000,000
个记录,但未能确定任何一种方法的优缺点,建议两者都会大大提高理解:
第一种是运行SQL查询并仅返回已过滤记录的主键值,指定可能为100-1000的TOP子句。然后可以将这些内容放入Web服务器上的会话变量中,并通过将主键值的子集提供回服务器来相应地进行分页。
对此有一个好处是,记录的过滤仅在用户最初执行搜索时发生一次,其次,如果需要,它可以一次翻阅整个记录集一个项目,例如在预览中此方法还提供了进一步过滤已过滤记录的一些好处,因为可以通过将主键值列表提供回SQL Server来确定可过滤选项 - 例如公共属性,标题,控制器等。
第二个选项是通过SQL Server执行过滤和分页,提供“每页记录数”和“页码数”等变量。
这样做的好处是没有必要使用用户会话阻塞Web服务器,这些用户会话的大小无疑至少每个都超过1000个字节,这只会导致长期的问题,因为网站的数量用户增加。相比之下,下行最终是我所列出的第一个选项的积极因素,例如缺乏确定仅具有单个页面或主键值子集的整个记录集的过滤选项的能力。在Web服务器上工作。
上述人员的想法是什么,特别是关于将结果的主键值存储在会话变量,内存,备用选项等方面?
答案 0 :(得分:0)
我是那种认为数据库时间比Web服务器时间更有价值的人。但那是我的方法。 在您的情况下,如何检索数据?您是否使用DataSet / DataTables或使用Strong类型容器?为什么不在Web服务器端甚至客户端使用linq或其他过滤技术? (您可以向用户显示所有记录并使用javascript进行过滤)。