gpt4 book ai didi

c# - 参数化 Linq to SQL 查询导致性能问题

转载 作者:行者123 更新时间:2023-11-30 18:31:41 25 4
gpt4 key购买 nike

我有一个 linq 查询,它针对 MSSQL server 2008 执行需要 11 分钟。我使用 MSSQL Profiler 找到执行时间很长的查询,然后我单独对我的数据库运行它。

我还删除了所有参数并直接添加值并运行查询。执行时间不到 1 秒!

我用谷歌搜索发现使用参数确实会影响性能,因为 the plan is compiled before the value of the where clause is known .

由于 Linq to SQL 始终运行参数化 SQL,在这种情况下我可以做些什么来提高性能?

关于索引的列,我还没有发现任何可以改进的地方。 Inner Join 语句中的第一个表有 192 014 行,不带参数的 SQL 执行时间不到一秒。附执行计划截图。

编辑在屏幕截图下方。

这是 Linq 查询:

var criteria = CreateBaseCriteria();

var wordsGroup = from word in QueryExecutor.GetSearchWords()
join searchEntry in QueryExecutor.GetReportData(criteria) on (word.SearchID + 100000000) equals searchEntry.EventId
group searchEntry by word.SearchWord into wg
select new SearchAggregate
{
Value = wg.Key,
FirstTime = wg.Min(l => l.EventTime),
LastTime = wg.Max(l => l.EventTime),
AverageHits = wg.Average(l => l.NumberOfHits.HasValue ? l.NumberOfHits.Value : 0),
Count = wg.Count()
};

return wordsGroup.OrderByDescending(w => w.Count).Take(maxRows);

Execution plan of query with parameters (linq to sql) Execution plan of query with known values

编辑:这里的屏幕截图确实有点小。参数化SQL只有5个参数。

编辑 2: 是带有参数 @p0 的 Inner Join 语句导致执行计划发生变化。当我只删除带有值本身的@p0 变量时,它会在不到一秒的时间内运行。如果这个值在所有情况下都是恒定的(我必须对此进行调查),我可以做任何事情以使这个值不会像参数一样被使用吗?

最佳答案

建议您在查询计划之上创建一个绿色索引。先试试这个。

关于c# - 参数化 Linq to SQL 查询导致性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19764683/

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