LINQ和经典asp的性能差异sql查询

问题描述 投票:0回答:1

我正在开发一个asp.net web forms 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秒。

查询不完全相同,但它与我写的几乎相似。

我无法弄清楚为什么这么长时间。有人可以告诉我为什么它需要这么长时间以及我应该如何解决它?

c# asp.net sql-server linq asp-classic
1个回答
2
投票

你不需要hashset,而是使用连接,你的查询可能看起来像

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)
            };
© www.soinside.com 2019 - 2024. All rights reserved.