2

我在 ASP.NET MVC 操作方法中有以下简单查询。

IEnumerable<Company> query = unitOfWork.CompanyRepository.dbSet
    .Include("Adresses.PhoneNumbers")
    .Include("Adresses.FaxNumber")
    .Include("Emails").Where(q => q.CustomerCompany == true);

此操作方法通过 ajax get 请求调用,有时需要长达 25 秒!数据库中只有 40 家公司。每个公司都有一个地址,最多有几个电话号码和传真号码。(有趣的是,有时需要 200-500 毫秒,但非常罕见)

如果我将此查询更改为以下

IEnumerable<Company> query = unitOfWork.CompanyRepository.dbSet
    .Where(q => q.CustomerCompany == true);

它只需要大约 200 毫秒。

所以我想知道为什么.Include这么贵。我的应用程序正在生产中,我正在将 SQL Azure 与 Azure 网站一起使用。

谢谢。

4

1 回答 1

2

生成的 SQL 比较复杂,但通常性能是由于 LINQ 查询编译开销所致。您需要配置文件才能确定。一种可能的解决方法是使用预编译查询,第二次和后续时间会更快。更好的解决方法可能是仅使用您需要的数据的投影,而不是在查询中包括 4 个实体,这相当于SELECT *所有 4 个表上的 a。如果您需要所有这些完整实体,另一个可能的解决方法是显式加载详细信息,这意味着更多(但更快!)查询。

于 2012-10-12T21:26:14.447 回答