分页大型数据集 - SQL Server(最佳实践)

时间:2010-06-24 14:50:14

标签: c# asp.net sql-server pagination

我对使用ASP.NET和SQL Server分页大型数据集(10万条记录)的最佳做法感兴趣。

之前我使用SQL服务器执行分页,虽然这似乎是一个理想的解决方案,但是使用此解决方案进行动态排序时出现问题(order by子句的case语句用于确定ASC / DESC的列和case语句订购)。我不喜欢这个,因为它不仅将应用程序与SQL细节绑定在一起,而且是一个可维护性的噩梦。

打开其他解决方案......

谢谢大家。

3 个答案:

答案 0 :(得分:1)

根据我的经验,100 000多条记录对于查看它们的用户而言记录太多。上次我这样做,我提供了过滤器。因此,用户可以使用它们并查看过滤的(较少数量)记录并对其进行排序,因此分页和排序变得更快(比在整个10万条记录上分页/排序)。如果用户没有使用过滤器,我会显示“警告”,即会返回大量记录并且会有延迟。根据Erick的建议在正在订购的列上添加索引也肯定有帮助。

答案 1 :(得分:0)

如果您使用Order by技术,每次翻页时,您将在服务器上产生相同的负载,因为您运行查询,然后过滤数据。

当我拥有非连接池环境的奢侈时,我已经创建并保持连接打开,直到分页完成。在连接上创建一个#Temp表,只显示需要返回的行的ID,并将IDENTITY字段添加到此行集。然后使用此表进行分页以获得最快的回报。

如果您被限制在连接池环境中,那么一旦连接关闭,#Temp表就会丢失。在这种情况下,您必须在服务器上缓存ID列表 - 永远不要将它们发送到客户端进行缓存。

答案 2 :(得分:0)

我想为Raj的答案添加一个快速建议。如果您创建一个格式为## table的临时表,它将继续存在。但是,它也将在所有连接中共享。

如果在要排序的列上创建索引,则此方法的成本要低得多。

埃里克