首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >临时保存长时间运行的SP的结果的最佳方式是什么?

临时保存长时间运行的SP的结果的最佳方式是什么?
EN

Stack Overflow用户
提问于 2012-03-13 04:30:32
回答 2查看 153关注 0票数 0

我有一个TSQL存储过程,它可以运行几分钟并返回几百万条记录,我需要在ASP.NET网格(准确地说是WebDataGrid )中显示这些数据。显然,我不想一次返回所有数据,并且需要设置某种分页选项-每次用户选择另一个页面时-从数据库加载另一部分数据。但我不能在每次请求新页面时都运行SP -这会花费太多时间。

什么是最好的方式来持久化数据从SP,以便当用户选择一个新的页面-新的数据部分将加载一个简单的SELECT...临时数据存储在哪里?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-13 06:36:37

几个选项

第一:如果用户只向前翻页,那么您只需保持连接打开并使用DataReader即可。根据需要只使用.Read()。

第二:使用userID作为存储结果的名称的一部分,创建一个#temp表。我不喜欢这种情况,因为有时用户中止时会留下表。大约1/2秒的命中率来创建和删除#temp。存储整个结果或仅存储PK,并按需创建页面详细信息。

第三:使用DataReader将PK读取到List<>中。它比你想象的要快。该列表仅发送到IIS (不发送到浏览器)。列表可以通过序号[]引用,并保留排序。根据需要获取页面的详细信息。这里的问题是(3,9,2,6)中的PK不会按该顺序返回它们。我使用TVP来传递订单,PK,因此页面是按顺序排序的。我正是这样做的,每次加载具有20个属性的对象的页面,每次40行,所需时间不到1/2秒。对每个表执行一次查询(而不是每行一个),然后在.NET中汇编、分配属性。使用DataReader (而不是DataTable)。您甚至可以在后台工作人员上运行阅读器,并使用progresschanged传回PKs的第一页。

票数 1
EN

Stack Overflow用户

发布于 2012-03-13 04:36:34

你有没有看过Server Side Paging (文章是2005年的,但可以使用2008和CTE)。还有--只是想知道,有什么原因要返回这么多行吗?即使页面大小是1000,我也不能很好地使用人工对一百万条记录进行分页。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9674354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档