首页 新闻 会员 周边

Linq结果集性能的疑问

0
悬赏园豆:50 [已解决问题] 解决于 2011-11-10 15:16

如代码1,先把数据ToList()到结果集中,然后再用sum函数。这样不会产生对数据表的sum聚合算法,而是在结果集中sum.这样是不是比代码2直接在数据库中sum性能要好呢?

 

代码1

var query = (from x in db.Course
select x.Score).ToList();

int sum = (decimal)query.Sum();

 

代码2

var query = from x in db.Course
select x.Score;

int sum = (decimal)query.Sum();
fantasy8341的主页 fantasy8341 | 初学一级 | 园豆:89
提问于:2011-11-10 10:16
< >
分享
最佳答案
0

在数据库中count完再出结果肯定是比把结果都select出来再在内存中count要快(想象一下你有10000条数据,网路传输和内存占用消耗),如果你只需要一个count结果,那肯定是在数据库中执行再获取结果的。如果你除了count数,还需要对这些数据做一些操作(比如读取,更新等等),那肯定是先都select出来再count。

收获园豆:50
水牛刀刀 | 大侠五级 |园豆:6350 | 2011-11-10 11:17

那我如果我先select出来到list ,然后再order by 呢。 就是说sql 中不排序?

fantasy8341 | 园豆:89 (初学一级) | 2011-11-10 14:37

就是说这样

var query = (from x in db.Course ).ToList(); 
query = decimalquery.Orderby(x=>x.datatime);

sql 中不排序,在返回记录集后排序,会不时比直接orderby性能能好些。

 

fantasy8341 | 园豆:89 (初学一级) | 2011-11-10 14:44

@fantasy8341: 这样差别不大。我建议都select出来再order by,而不是在数据库中排序。因为在C#中你可以更自由的排序(比如调用C#的函数,根据结果排序等),比数据库中排序更自由。当然性能上差别应该不大。

水牛刀刀 | 园豆:6350 (大侠五级) | 2011-11-10 14:46

@水牛刀刀:  ok 非常感谢,我准备来测试一下。

fantasy8341 | 园豆:89 (初学一级) | 2011-11-10 15:16
其他回答(1)
1

第一种写法把数据全部选出来了再计算,第二种是在数据库中计算,所以第二种性能好一些。

artwl | 园豆:16736 (专家六级) | 2011-11-10 10:36

第一种选出来后在内存中计算性能上还比在数据库里差一些啊?  我理解反了?

支持(0) 反对(0) fantasy8341 | 园豆:89 (初学一级) | 2011-11-10 10:51

@fantasy8341: 如果表的数据量很大选出来放在内存中需要占用大量的内存,在数据库中操作只是一个count方法,肯定会快很多。

支持(0) 反对(0) artwl | 园豆:16736 (专家六级) | 2011-11-10 10:53

@天行健 自强不息: 

多谢 回复

那我如果我先select出来到list ,然后再order by 呢。 就是说sql 中不排序?

 

支持(0) 反对(0) fantasy8341 | 园豆:89 (初学一级) | 2011-11-10 14:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册