Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.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# 如何在asp.net mvc3中使用Nhibernate进行更高效的查询_C#_Sql_Database_Asp.net Mvc - Fatal编程技术网

C# 如何在asp.net mvc3中使用Nhibernate进行更高效的查询

C# 如何在asp.net mvc3中使用Nhibernate进行更高效的查询,c#,sql,database,asp.net-mvc,C#,Sql,Database,Asp.net Mvc,我在数据库中的联系人表中有大约100万条记录,现在我只能得到30条。如何提高以下查询的效率: 获取联系人方法 private IQueryable<Contact> GetContacts() { return this.Query().Where(c => c.ActiveEmployer== true); // here ' this ' is the current service context } 但是这个查询有时需要10

我在数据库中的联系人表中有大约100万条记录,现在我只能得到30条。如何提高以下查询的效率:

获取联系人方法

    private IQueryable<Contact> GetContacts()
    {

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

但是这个查询有时需要10秒或更长的时间,将来我可以拥有3000-4000万个联系人,那么我该怎么办呢?

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

 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);