gpt4 book ai didi

linq-to-sql - linq 性能问题

转载 作者:行者123 更新时间:2023-12-04 06:20:53 25 4
gpt4 key购买 nike

我有一个运行非常缓慢的半复杂 LINQ 查询。我不相信它正在使用子查询。我尝试使用日志记录,但只看到生成了一个查询。代码类似于以下内容:

dc.defferedloadingenabled = false
dc.objecttrackingenabled = false

dataloadoptions dlo = new dataloadoptions
dlo.loadwith<MyQuestion>(q => q.lotsofresponses)
dc.LoadOptions = dlo

IQuerayable<Question> questions = dc.questions.where( q => q.ParentId == specificID).orderBy(q => q.Rank);

foreach (question in questions)
{
}

需要有关如何加快速度的帮助。我相信我正在使用最佳实践。

下面是生成的 SQL。我删除了实际的键名和列名。计数(*)对我来说看起来很奇怪。
SELECT [t0].[QId], [t0].[SId], [t0].[Tp], [t0].[St], [t0].[OL], [t0].[Is], [t0].[Tbl], [t0].[IsL], [t0].[Priority], [t1].[ResponseId], [t1].[QId] AS [QId2], [t1].[UId], [t1].[AN], [t1].[AT], (
SELECT COUNT(*)
FROM [dbo].[Responses] AS [t2]
WHERE [t2].[QId] = [t0].[QId]
) AS [value]
FROM [dbo].[Questions] AS [t0]
LEFT OUTER JOIN [dbo].[Responses] AS [t1] ON [t1].[QuestionId] = [t0].[QuestionId]
WHERE [t0].[SurveyId] = @p0
ORDER BY [t0].[Priority], [t0].[QId], [t1].[ResponseId]

最佳答案

由于您已通过日志记录捕获了查询,因此将其带到 SqlStudio 并检查执行计划。

  • 您不应该看到 TableScan。如果您看到这一点,请向表中添加一个主键。
  • 您不应在lotsOfResponses 表上看到ClusteredIndexScan。如果您看到这一点,请在lotsOfResponses 表的外键列上添加索引。
  • 您应该在 Questions 表上看到 ClusteredIndexSeek 或 IndexSeek。如果您没有看到这一点,请将 Questions.ParentId 设为主键或在其上添加索引(以最合适的方式为准)。

  • 此外,运行查询
    SET STATISTICS IO ON 
    SET STATISTICS TIME ON

    并检查性能指标的消息选项卡。

    关于linq-to-sql - linq 性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6587634/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com