2013-10-25 39 views
1

在linq到sql函数的查询速度方面有一个奇怪的不一致。我有一个我从MVC应用程序调用的函数。这总是非常缓慢,大约7秒。当我从SQL管理工作室调用相同的函数时,它有时很慢,有时很快(几分之一秒)。我不确定什么时候变慢,什么时候变得很快,但我发现一个循环(除了MVC应用程序总是很慢),可以得到一致的结果。LINQ和(有时)之间的查询速度不一致SQL

  • 查询在应用程序中运行。这很慢。
  • 我试着完全按照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)的形式查询“unwrapped”。这仍然是缓慢的,也是连续运行。
  • 我用alter function [...]重新定义函数。
  • 运行原始sp_execute查询仍然很慢,也在运行时执行。
  • 运行解包功能很快。真的很快。
  • 运行原始的sp_execute查询现在真的太快了。还有不同的@ p0参数。
  • 查询在应用程序中运行。我们又变得缓慢了。

我完全和完全沮丧,为什么会发生这种情况,以及我如何补救它。这感觉就像它与缓存的执行计划或类似的东西有关,但我不知道如何确切知道发生了什么 - 或者如何补救。有谁知道发生了什么?

+0

都是可能的字段建立索引?你在晚上运行索引重建和统计更新作业吗? – m4ngl3r

+1

如果连续运行速度很慢,可能不是由于编译和缓存执行计划。 –

+0

索引呢? – m4ngl3r

回答

0

查询在SQL管理工作室首次执行时花费时间并且花费较少时间的原因是因为执行查询时数据存储在SQL服务器缓存中。 并且当再次执行相同的查询时,则从缓存中获取数据。

要查看查询中获取的确切时间,你需要运行查询 之前清除高速缓存,并且可以通过

DBCC FREEPROCCACHE做

DBCC DROPCLEANBUFFERS

+0

连续运行仍然很慢吗? – Martijn