Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 非常慢的实体框架核心查询_C#_Asp.net Core_Entity Framework Core - Fatal编程技术网

C# 非常慢的实体框架核心查询

C# 非常慢的实体框架核心查询,c#,asp.net-core,entity-framework-core,C#,Asp.net Core,Entity Framework Core,我正在处理一个实体框架核心查询,它在处理大量数据时速度非常慢。数据库结构如下所示: 我想创建一个查询,检查客户的地址是否已被使用。我提出了这个问题: public bool IsNew(string name, int shopId, AddressModel addressModel) { return !this.Entities.Customers .Where(c => c.Name == name &&

我正在处理一个实体框架核心查询,它在处理大量数据时速度非常慢。数据库结构如下所示:

我想创建一个查询,检查客户的地址是否已被使用。我提出了这个问题:

    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核心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

谢谢

您是否在用于查找的列上添加了索引?为什么需要三个单独的条件?这与简单地执行
this.Entities.Customers.Any(c=>c.Name==Name&&c.ShopId==ShopId&&c.Address.City==addressModel.Name&&c.Address.PostalCode==addressModel.PostalCode)不一样吗?
?为什么City是varbinary?好的,当ef核心运行缓慢时,首先要检查的是:它执行哪些查询,ef是否切换到客户端评估?第二件要检查的事情是缺少索引的查询计划。我们也做不到。@Menahem计数不是一个改进。EXIST查询是最便宜的查询。