2个都是在执行 int use = .....这句的时候慢。
数据有最大有几百万条,但是现在blists里只有几万条的数据,查询速度就很慢了。这个有办法优化吗?
下面2种写法有没有区别?如果有那个执行效率较好(不考虑别的,只考虑得到use的结果)
- C# code
var blist = from p in blists group p by new { p.roleid,p.oper_type} into g select new { g.Key.oper_type, sum_gold = g.Sum(p => p.gold), sum_coupon = g.Sum(p => p.coupon), sum_copper = g.Sum(p => p.copper) };int use = blist.Where(p => p.oper_type == 1).Sum(p => p.sum_gold);/////////////////////////////////////////////////var blist = from p in blists group p by p.oper_type into g select new { g.Key, sum_gold = g.Sum(p => p.gold), sum_coupon = g.Sum(p => p.coupon), sum_copper = g.Sum(p => p.copper) };int use = blist.SingleOrDefault(p => p.oper_type == 1).sum_gold;
------解决方案--------------------------------------------------------
没什么区别,
你两种方法都使用了 Sum 等类似这样的非延迟查询操作符
会导致查询立即执行去操作内存中的数据
------解决方案--------------------------------------------------------
优化数据库吧
------解决方案--------------------------------------------------------
一般这种比较暴力的玩意不是用查询来解决的
搞个专门的记录来记吧……
没插一条数据 顺便更新一下那条记录(用触发器还是逻辑代码里面的事件随你高兴)
用的时候直接读那条数据
------解决方案--------------------------------------------------------
如果是linq to objects,可以试试plinq(并行linq)。
------解决方案--------------------------------------------------------
换种方式,这样非延迟,太慢了
------解决方案--------------------------------------------------------
在sql中看看有没有什么比较好的优化方法