有时Entity Framewok查询非常慢

时间:2019-11-28 10:28:34

标签: c# performance entity-framework asp.net-web-api

我们有以下代码段:

        public async Task<bool> AreConsumerIdAndSecretExistAsync(AuthenticateConsumerRequest request)
    {
        return await _pplEntities.ApiConsumers.AnyAsync(ac =>
            ac.ConsumerId.Equals(request.ConsumerId) && ac.ConsumerSecret.Equals(request.ConsumerSecret));
    }

这将查询仅包含三行数据的表。 由于某种原因,执行上述方法有时会花费很长时间。 这不是发生此问题的唯一地方。好像在其他地方运行多个SQL查询时,要花很长时间才能运行第一个查询,而其他查询似乎没有问题。如果我在本地运行该应用程序,除了第一个查询之外,它的运行速度非常快。

下面是New Relic跟踪的图片,显示了应用程序的运行速度。在其他环境中,我们会遇到整个请求需要15秒以上的时间;这非常令人困惑。

我们正在.NET 4.6.1上运行。

enter image description here

1 个答案:

答案 0 :(得分:0)

屏幕快照中的

是左边的数字是被调用的时间还是时间?...是被调用的时间,而不是正确的时间... 因此调用它的速度不会太慢...

避免等于,这是一个c#函数,不确定它是否具有sql翻译...其中'=='100%我知道。

在pr或fk或主查找列上放置索引

var res = _pplEntities.ApiConsumers
            .Where(ac => ac.ConsumerId  == request.ConsumerId 
                      && ac.ConsumerSecret == request.ConsumerSecret)
          .ToListAsync()

if(res.Any())
{
     //to stuff and things
}