如代码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();
在数据库中count完再出结果肯定是比把结果都select出来再在内存中count要快(想象一下你有10000条数据,网路传输和内存占用消耗),如果你只需要一个count结果,那肯定是在数据库中执行再获取结果的。如果你除了count数,还需要对这些数据做一些操作(比如读取,更新等等),那肯定是先都select出来再count。
那我如果我先select出来到list ,然后再order by 呢。 就是说sql 中不排序?
就是说这样
var query = (from x in db.Course ).ToList();
query = decimalquery.Orderby(x=>x.datatime);
sql 中不排序,在返回记录集后排序,会不时比直接orderby性能能好些。
@fantasy8341: 这样差别不大。我建议都select出来再order by,而不是在数据库中排序。因为在C#中你可以更自由的排序(比如调用C#的函数,根据结果排序等),比数据库中排序更自由。当然性能上差别应该不大。
@水牛刀刀: ok 非常感谢,我准备来测试一下。
第一种写法把数据全部选出来了再计算,第二种是在数据库中计算,所以第二种性能好一些。
第一种选出来后在内存中计算性能上还比在数据库里差一些啊? 我理解反了?
@fantasy8341: 如果表的数据量很大选出来放在内存中需要占用大量的内存,在数据库中操作只是一个count方法,肯定会快很多。
@天行健 自强不息:
多谢 回复
那我如果我先select出来到list ,然后再order by 呢。 就是说sql 中不排序?