我在使用 linq to sql 函数的查询速度上有一个奇怪的不一致。我有一个从 MVC 应用程序调用的函数。这总是非常慢,大约 7 秒。当我从 SQL 管理工作室调用相同的函数时,它有时很慢,有时很快(几分之一秒)。我不确定它什么时候变慢,什么时候变快,但我发现一个周期(除了 MVC 应用程序总是很慢)可以给出一致的结果。
- 查询在应用程序中运行。这很慢。
- 我完全按照 LINQ 执行的方式尝试查询。这是形式
sp_execute N' select [some] [select] [clauses] from functionname(@p0)', 'declare @p0 decimal(9,0)', @p0=123456789
。这在第一次运行和连续运行时也很慢。 - 我尝试在表单中“展开”查询
select [some] [select] [clauses] from functionname(123456789)
。这仍然很慢,连续运行也是如此。 - 我用 alter function [...] 重新定义了这个函数。
- 运行原始的 sp_execute 查询仍然很慢,在 censecive 运行时也是如此。
- 运行展开的函数很快。真快。
- 运行原始 sp_execute 查询现在也非常快。也有不同的@p0 参数。
- 查询在应用程序中运行。我们又变慢了。
我完全不知道为什么会发生这种情况,以及如何解决它。感觉它与缓存的执行计划或类似的东西有关,但我对此知之甚少,无法确切知道发生了什么 - 或如何解决它。有谁知道发生了什么?