0

DBの連絡先テーブルに約100万件のレコードがありますが、取得する必要があるのは30件だけです。次のクエリをより効率的にするにはどうすればよいですか。

GetContactsメソッド

    private IQueryable<Contact> GetContacts()
    {

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

Gettinの連絡先

 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秒以上かかることもあり、将来的には3,000万から4,000万の連絡先を持つことができます。それでは、どうすればよいでしょうか。

4

1 に答える 1

0

より多くの情報を必要とせずにあなたを助けるためにそのクエリの素晴らしい修正を思い付くことができる人もいるかもしれませんが、そのクエリと他のすべての人については、NHibernateによって作成されたクエリを見るとおそらくはるかに多くの洞察を得ることができます。これを行っていない場合は、Log4Net(および場合によってはNLog)を有効にしてNHが生成するSQLステートメントを出力するか、SQLServer内のSQL接続をプロファイリングできます。次に、そのSQLを自分で実行し、クエリプランを表示するように選択できます。これにより、クエリが何を行っているかが正確にわかり、問題を自分で解決できる可能性があります。インデックス、元のWHERE、または後続のFETCHステートメントの1つまたはすべてが欠落している可能性があります。もう1つの質問は、似たようなことをするためにSQLステートメントを手作りしましたか?それはどのくらいかかりますか?

于 2012-06-26T07:54:06.730 に答える