Запрос LINQ выполняется слишком медленноC#

Место общения программистов C#
Ответить
Anonymous
 Запрос LINQ выполняется слишком медленно

Сообщение Anonymous »

Я работаю над веб-приложением среднего размера, которое обрабатывает проекты, счета и т. д.
Мне сложно оптимизировать запрос фильтра для списка проектов всякий раз, когда я фильтрую его по подстроке темы. Иногда поиск занимает целую минуту — и DTU в моем небесном приложении Azure взлетает до 100 %.
Это запрос LINQ:

Код: Выделить всё

if (!Filter.Client.IsNullOrEmpty())
{
var searchedTerm = Filter.Client;
query = query.Where(p =>
p.AddressBookLinkage
.Any(linkage => (linkage.MainContactId == null
? linkage.MainSubject.Name
: linkage.MainContact.Name).Contains(searchedTerm)));
var sqlQuery = query.ToList();
}
AddressBookLinkage хранит идентификаторы субъекта или идентификатора контакта. Каждый проект содержит ровно один из них, а другой имеет значение NULL.
Это сгенерированный SQL подзапроса, который обрабатывает фильтр для этого столбца

Код: Выделить всё

    SELECT 1
FROM [AddressBookProjectLinkages] AS [a]
LEFT JOIN [Subjects] AS [s] ON [a].[MainSubjectId] = [s].[Id]
LEFT JOIN [Contacts] AS [c] ON [a].[MainContactId] = [c].[Id]
WHERE ([p].[Id] = [a].[ProjectId]) AND ((@__searchedTerm_2 LIKE N'') OR (CHARINDEX(@__searchedTerm_2, CASE
WHEN [a].[MainContactId] IS NULL THEN [s].[Name]
ELSE [c].[Name]
END) > 0)))
ORDER BY [p].[Id]
Я думаю, важно отметить, что по какой-то причине этот фильтр работает в моей локальной среде гораздо плавнее, чем в рабочей среде (с производственными данными). Веб-приложение, включая сервер SQL, работает в службах Azure. Однако я вижу, что такая значительная разница в производительности происходит только с этим фильтром.
Другой вопрос, который возникает, заключается в том, достаточно ли моего плана Azure SQL-сервера. Я использую уровень Standard с 10 DTU. Используется только около 275 МБ пространства БД.
  • Я установил индекс по имени субъекта и контактного лица только для того, чтобы понять, что индекс, вероятно, игнорируется. как только я использую условия SQL CHARINDEX или LIKE.
  • Я реализовал полнотекстовый поиск в своей базе данных и установил индекс для этих двух столбцов, но затем понял, что FTS не используется для поиска подстрок. .


Подробнее здесь: https://stackoverflow.com/questions/791 ... s-too-slow
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»