SQL-запрос медленный при выполнении с LINQ (с использованием полнотекстового поиска) - PullRequest
1 голос
/ 29 апреля 2011

У меня есть запрос, который генерируется LINQ и выдает ошибку времени ожидания.Но когда я запускаю сгенерированный запрос в SQL Server Management Studio, он выполняется менее чем за одну секунду.

Вот запрос:

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:

Использование LINQ:

Eventclass = RPC: Завершено
ApplicationName = .Net SqlClient Data Provider
CPU = 12625
Reads = 1137844
Запись = 0
Продолжительность= 29989

Использование SQL Server Management Studio:

Eventclass = SQL: BatchCompleted
ApplicationName = Microsoft SQL Server Management Studio - Запрос
ЦП = 78
Считывания= 31645
Пишет = 0
Продолжительность = 99

В чем причина такой большой разницы в производительности при равном запросе и как я могу решить эту проблему?

1 Ответ

0 голосов
/ 20 декабря 2011

Однажды у нас была точно такая же проблема.

Одной из возможных причин может быть несоответствие типов параметров , которое вызывает это.

Но это не было проблемой в нашем случае.Оказалось, что в некоторых случаях выполнение запроса занимает больше времени.Таким образом, мы изолировали запрос и запустили его через класс ADO.NET SqlCommand.Хотите верьте, хотите нет, но когда мы добавили дополнительные пробелы между командами sql, запрос стал выполняться намного быстрее.

Поэтому мы взяли запрос и создали из него представление.Это решило нашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...