Я работаю над запросом Entity Framework Core, который очень медленно работает с большим объемом данных. Структура базы данных выглядит следующим образом:
Я хочу создать запрос, который проверит, был ли уже использован адрес клиента. Я пришел с этим запросом для этого:
public bool IsNew(string name, int shopId, AddressModel addressModel)
{
return !this.Entities.Customers
.Where(c => c.Name == name && c.ShopId == shopId)
.Select(c => c.Address)
.Where(a => a.City == addressModel.Name)
.Any(s => s.PostalCode == addressModel.PostalCode);
}
Этот запрос очень медленный, если в Магазине много клиентов с одинаковым именем (что не имеет смысла, но это не настоящая база данных).
Итак, мой вопрос: как повысить производительность этого запроса? Это проект ASP.NET Core Web API.
Это сгенерированный SQL-запрос:
SELECT CASE
WHEN EXISTS (
SELECT 1
FROM [Customers] AS [c]
INNER JOIN [Address] AS [r.Address] ON [r].[AddressId] = [r.Address].[Id]
WHERE ((([r].[Name] = 'name') AND ([r].[ShopId] = 1)) AND ([r.Address].[City] = 'Amsterdam')) AND ([r.RequestBrowser].[PostalCode] = '4444XX'))
THEN CAST(1 AS BIT) ELSE CAST(0 AS BIT)
END
Спасибо