[英]Difference in linq-to-sql query performance using GenericRespositry
[英]performance difference sql query with LINQ and classic asp
我正在开发一个asp.net Web窗体4.5网站,但遇到一个问题,我必须从最初由经典asp编写的sql server中执行sql查询。
原始查询是这样的。
select trait1, trait2, sum(qty) as qty from table2
right outer join table1 on (table1.col == table2.col)
where table2.idx is null
group by trait1, trait2
order by trait1, trait2
在编写.net程序时,我正在尝试重写此查询...就像这样
var myHashSet = new HashSet<string>(table2.Select(c => c.col));
from item in table2
where !myHashSet.Contains(item.col)
group item.qty by new {item.trait1, item.trait2} into total
select new
{
trait1 = total.Key.trait1,
trait2 = total.Key.trait2,
qty = total.Sum()
} into anon
order by anon.qty descending
select anon
ps:部分忽略顺序..这并不重要
对于经典的ASP,大约需要1.5秒,但是对于c#asp.net,大约需要8秒。
这些查询并非完全一样,但与我编写的内容几乎相似。
我无法弄清楚为什么要花这么长时间。有人可以告诉我为什么要花这么长时间,以及我应该如何解决?
您不需要哈希集,而是使用联接,查询可能看起来像
var inner = from two in table2
join one in table1
on two.col equals one.col
group two by new
{
two.trait1,
two.trait2
} into total
select new
{
total.Key.trait1,
total.Key.trait2,
qty = total.Sum(p => p.qty)
};
编辑完整性,我还要添加一个左联接变体
var left = from two in table2
from one in
(
from temp in table1
where temp.col == two.col
select temp
).DefaultIfEmpty()
group two by new
{
two.trait1,
two.trait2
} into total
select new
{
total.Key.trait1,
total.Key.trait2,
qty = total.Sum(p => p.qty)
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.