2011-04-29 61 views
1

我有一个由LINQ生成的查询并生成超时错误。 但是,当我在SQL服务器管理工​​作室中运行生成的查询时,它会在不到一秒的时间内执行。使用LINQ执行SQL查询时速度慢(使用全文搜索)

这里的查询:

exec sp_executesql N'SELECT COUNT(*) AS [value] 
FROM [dbo].[Document] AS [t0] 
INNER JOIN [dbo].[Document_Search_order_nummer](@p0) AS [t1] ON [t0].[DocumentID] = [t1].[Key] 
LEFT OUTER JOIN [dbo].[DocType] AS [t2] ON [t2].[Id] = [t0].[DocumentTypeIDOut] 
LEFT OUTER JOIN [dbo].[DocTypeFormat] AS [t3] ON [t3].[Id] = [t2].[FormatId] 
LEFT OUTER JOIN [dbo].[DocTypeType] AS [t4] ON [t4].[Id] = [t2].[TypeId] 
INNER JOIN [dbo].[OriginalDocument] AS [t5] ON [t5].[OriginalDocID] = [t0].[OriginalDocID] 
INNER JOIN [dbo].[User] AS [t6] ON [t6].[User_ID] = [t0].[DocumentFrom] 
INNER JOIN [dbo].[User] AS [t7] ON [t7].[User_ID] = [t0].[DocumentTo] 
WHERE ([t0].[DocumentID] <> @p1)',N'@p0 nvarchar(4000),@p1 int',@p0=N'"*+11110001+*" ',@p1=270675 

下面是从SQL Server事件探查器日志:

使用LINQ:

事件类= RPC:完成
应用程序名称= .net SqlClient数据提供
CPU = 12625
Reads = 1137844
Writ ES = 0
时间= 29989

使用SQL Server Management Studio中:

事件类= SQL:BatchCompleted
应用程序名称=微软SQL Server Management Studio中 - 查询
CPU = 78
读取= 31645
写入= 0
持续时间= 99

什么是日由于与同等查询有很大的性能差异,我该如何解决这个问题?

+0

没有人能让我走上正轨吗? :( – brechtvhb 2011-04-29 12:59:19

+0

请看这里:http://www.mssqltips.com/sqlservertip/1304/reproducing-sql-server-query-execution-plan-performance-problems/ – 2011-12-20 17:27:28

回答

0

我们有一次完全相同的问题。

一个可能的原因可能是导致此问题的parameters type mismatching

但是,在我们的例子中这不是问题。结果发现,在某些情况下,查询只需要更长的时间来执行。所以我们隔离了查询并通过ADO.NET运行它SqlCommand类。当我们在sql命令之间添加额外的空格时,请相信它或不会导致查询执行得更快。

所以我们接受了查询并从中创建了一个视图。它解决了我们的问题。