我正在研究一个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
谢谢