У меня есть поисковый запрос, сгенерированный EF 6, который иногда вызывает проблемы с производительностью для критериев поиска, что дает большие результаты. Производительность запросов непредсказуем, иногда он выполняет хорошо, и иногда его not.The следующее запрос пойманы в SQL Profiler, который запрашивает видТребуется настройка производительности запросов EF. Или проблема с базой данных?
exec sp_executesql N'SELECT
[Extent1].[LastName] AS [LastName],
[Extent1].[FirstName] AS [FirstName],
.
.
FROM (SELECT
[PersonView].[LastName] AS [LastName],
[PersonView].[FirstName] AS [FirstName],
.
.
FROM [Staff].[PersonView] AS [PersonView]) AS [Extent1]
WHERE [Extent1].[FirstName] = @p__linq__0',N'@p__linq__0 varchar(8000)',@p__linq__0='smith'
Ниже приведен код Repository
public IEnumerable<PersonSearchResult> SearchPersons(Expression<Func<PersonView, bool>> searchCriteria)
{
var query = _entities.PersonViews.AsExpandable().Where(searchCriteria);
return query;
}
I» m с помощью построителя предикатов для создания динамических критериев поиска.
Моя озабоченность связана с непредсказуемым характером исполнения с теми же критериями поиска.
Ниже приведены мои вопросы
Я считаю, что выбрать х из отборного х из формата таблицы запроса является причиной этой проблемы. Когда я выполнял только внутреннюю часть «Выбор», он работал лучше, когда весь запрос боролся. Нужно ли это настраивать? Если да, с чего начать?
Или это проблема с базой данных? Потому что этот запрос иногда работает хорошо?
Вы должны убедиться, что проблемы с производительностью связаны с фильтрами по конкретным столбцам. Вам нужно сделать больше анализа. –
Запустите запрос в SSMS, проверьте план выполнения, там могут быть предложены индексы. – artm