首页 新闻 会员 周边 捐助

临时表和ADO.NET全部读出,哪个效率更高,更节省服务器资源

0
悬赏园豆:20 [已解决问题] 解决于 2014-07-18 15:29

在做一个数据统计的时候,要把一个表的数据进行group by,并且是进行分页的,单条SQL语句无法返回一页的结果集(只能返回整个表的结果集),因此现在有两种方法,一种是在存储过程里将所有数据查询出来,然后筛选出当前页的数据插入到一张临时表里,只要读取这张临时表就能读出当前页数据,读取完后删除临时表。另外一种方法是将整张表的数据用ADO.NET全部读出,然后在.NET环境里对数据进行分组和当前页数据的筛选。两种方法都要把整张表读出,只不过一种直接在SQL里,另外一种把整表返回到.net环境里,但是在SQL SERVER里多了一个删除临时表的操作,频繁的新建和删除表,会不会很消耗服务器资源?那种方法更好?

ludi的主页 ludi | 初学一级 | 园豆:5
提问于:2014-05-28 09:08
< >
分享
最佳答案
0

``谁跟你说"单条SQL语句无法返回一页的结果集(只能返回整个表的结果集)"的?

收获园豆:20
吴瑞祥 | 高人七级 |园豆:29449 | 2014-05-28 09:31

SELECT GoodsId,SUM(GoodsQty) AS SalesCount,SUM(GoodsAmount)

AS SalesTotal

FROM dbo.od_OrderItem

GROUP BY GoodsId

ORDER BY SUM(GoodsQty) DESC

这条数据返回的是整张表group by组合之后的所有数据,怎么根据当前页码pageIndex筛选出当前页数据,你能实现,我就佩服你了

ludi | 园豆:5 (初学一级) | 2014-05-28 09:34

@ludi: 你不知道子查询吗?而且分页查询本来就都是子查询吧?

select * from (

select *,row_number() over(order by SalesCount)as rownumber from (

SELECT GoodsId,SUM(GoodsQty) AS SalesCount,SUM(GoodsAmount)

AS SalesTotal

FROM dbo.od_OrderItem

GROUP BY GoodsId) t) t1 where t1.rownumber>1 and t1.rownumber<20

要是觉得效率低可以看看下执行计划

这样不行?

吴瑞祥 | 园豆:29449 (高人七级) | 2014-05-28 09:50

@吴瑞祥: 对,做个比较子查询就ok了,很简单的逻辑

AndonLi | 园豆:128 (初学一级) | 2014-05-28 12:29
其他回答(2)
0

哥,你的需求简单说说。UI上要怎么反应?

用这个试试

http://www.cnblogs.com/humble/p/3644516.html

[秦时明月] | 园豆:738 (小虾三级) | 2014-05-28 09:33
0

那就组合查询呗,一条语句应该可以做到的

刘宏玺 | 园豆:14020 (专家六级) | 2014-05-28 09:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册