繁体   English   中英

与LINQ和经典ASP的性能差异SQL查询

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM