2011-04-29 60 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命令之間添加額外的空格時,請相信它或不會導致查詢執行得更快。

所以我們接受了查詢並從中創建了一個視圖。它解決了我們的問題。