首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LINQ-To-SQL -慢查询

LINQ-To-SQL -慢查询
EN

Stack Overflow用户
提问于 2011-11-29 00:49:42
回答 2查看 581关注 0票数 0

我只是想知道是否有人可以提供任何建议,如何改善我的查询。

基本上,它会将2行合并成1行。唯一不同的是“Type”字符列(“S”或“C”)和值。我想要做的是选择一行,带有'S‘值和'C’值,并计算差值(S-C)。

我的查询可以工作,但它相当慢-它需要大约8秒才能获得结果,这对于我的应用程序来说并不理想。我希望我能改变数据库结构,但遗憾的是我做不到!

下面是我的问题:

代码语言:javascript
复制
var sales = (from cm in dc.ConsignmentMarginBreakdowns
            join sl in dc.SageAccounts on new { LegacyID = cm.Customer, Customer = true } equals new { LegacyID = sl.LegacyID, Customer = sl.Customer }
            join ss in dc.SageAccounts on sl.ParentAccount equals ss.ID
            join vt in dc.VehicleTypes on cm.ConsignmentTripBreakdown.VehicleType.Trim() equals vt.ID.ToString() into vtg
            where cm.ConsignmentTripBreakdown.DeliveryDate >= dates.FromDate && cm.ConsignmentTripBreakdown.DeliveryDate <= dates.ToDate
            where (customer == null || ss.SageID == customer)
            where cm.BreakdownType == 'S'
            orderby cm.Depot, cm.TripNumber
            select new
            {
                NTConsignment = cm.NTConsignment,
                Trip = cm.ConsignmentTripBreakdown,
                LegacyID = cm.LegacyID,
                Costs = dc.ConsignmentMarginBreakdowns.Where(a => a.BreakdownType == 'C' && a.NTConsignment == cm.NTConsignment && a.LegacyID == cm.LegacyID && a.TripDate == cm.TripDate && a.Depot == cm.Depot && a.TripNumber == cm.TripNumber).Single().Value,
                Sales = cm.Value ?? 0.00m,
                Customer = cm.Customer,
                SageID = ss.SageID,
                CustomerName = ss.ShortName,
                FullCustomerName = ss.Name,
                Vehicle = cm.ConsignmentTripBreakdown.Vehicle ?? "None",
                VehicleType = vtg.FirstOrDefault().VehicleTypeDescription ?? "Subcontractor"
            });
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-29 01:03:16

在优化Linq to SQL查询时,SQL Server事件探查器是一个很好的起点。在那里您可以找到由Linq to SQL生成的SQL代码。在此基础上,您可以摆弄linq查询,看看是否可以让它编写更好的查询。如果这不起作用,您总是可以手动编写一个存储过程,然后从Linq到SQL调用它。

票数 1
EN

Stack Overflow用户

发布于 2011-11-29 00:59:36

确实没有提供足够的信息来提出有见地的意见。例如,每个表中有多少行?生成的T-SQL是什么样子的?

我建议首先使用输出的T-SQL,生成查询计划并查找表或索引扫描。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8299276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档