我有一个由LINQ生成的查询并生成超时错误。 但是当我在SQL Server管理工作室中运行生成的查询时,它会在不到一秒的时间内执行。
以下是查询:
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 Profiler的日志:
使用LINQ:
Eventclass = RPC:已完成
ApplicationName = .Net SqlClient数据提供者
CPU = 12625
读= 1137844
写= 0
持续时间= 29989年
使用SQL Server Management Studio:
Eventclass = SQL:BatchCompleted
ApplicationName = Microsoft SQL Server Management Studio - 查询
CPU = 78
读= 31645
写= 0
持续时间= 99
使用相同的查询产生这种巨大性能差异的原因是什么?如何解决此问题?
答案 0 :(得分:0)
我们曾经遇到过完全相同的问题。
可能的原因可能是导致此问题的parameters type mismatching。
但是,在我们的案例中,这不是问题。事实证明,在某些情况下,查询只需要更长的时间来执行。所以我们隔离了查询并通过ADO.NET SqlCommand
类运行它。信不信由你在sql命令之间添加了额外的空格,导致查询执行得更快。
所以我们接受了查询并从中创建了一个视图。它解决了我们的问题。