0

我在数据库的联系人表中有大约 100 万条记录,现在我只需要获取 30 条记录。如何使以下查询更有效:

获取联系人方法

    private IQueryable<Contact> GetContacts()
    {

        return this.Query().Where(c => c.ActiveEmployer== true); // here ' this ' is the current service context 
    }

刚接触

 var contactlist = GetContacts(); // this will get all records from db 
 var finalcontacts = contactlist.Skip(0).Take(30).Fetch(c.Roles).Fetch(c.SalaryInfo).ThenFetch(c.Employer);

但是这个查询有时需要将近 10 秒或更长时间,并且将来我可以拥有 30 到 4000 万个联系人,那我该怎么办?

4

1 回答 1

0

可能有些人可以在不需要更多信息的情况下对该查询提出一个很好的解决方案来帮助您,但是对于该查询和所​​有其他查询,您可能可以通过查看 NHibernate 创建的查询获得更多洞察力. 如果您在启用 Log4Net(可能还有 NLog)输出 NH 生成的 SQL 语句之前没有这样做,或者您可以分析 SQL Server 中的 SQL 连接。然后,您可以自己运行该 SQL 并选择显示查询计划。这将准确地告诉您查询正在做什么,并且您可以自己解决问题。它可能缺少索引、原始 WHERE 或一个或所有后续 FETCH 语句。另一个问题是,你是否手工制作了一个 SQL 语句来做类似的事情,这需要多长时间?

于 2012-06-26T07:54:06.730 回答