2017-11-21 7 views
0

大きなテーブル(1mレコード)でLinqクエリを実行して、他の小さなテーブルに結合する必要があるこの問題があります。クエリの実行には時間がかかり、時にはExecution Timeout Expiredで終了します。実行時間を短縮するためにクエリを改善する方法がわかりません。EF Linqクエリパフォーマンスを向上させる

var result = from p in db.population 
       join e in db.engineers on p.id equals e.personId into ps 
       from e in ps.DefaultIfEmpty() 
       where (e == null || e.activity == "student") 
       select p.name; 

var final result = result.Take(100).ToList(); 

は基本的に私は、エンジニア、学生は除外されている技術者ではありませんdb.populationから最初の100人を取得したいです。

パフォーマンスを改善するためのより良い方法でクエリを記述できるかどうか不安ですか?

+0

に参加してみこれが正しいのですか? FKとして主キーを使用していますか? – Andrei

+0

はタイプミスであり、今修正されました – Oysio

+1

'Any()'を使ってクエリを再構成しようとします( 'join'の代わりにナビゲーションプロパティを使います)。 –

答えて

0

この は前にそれを実行してください `p.idがe.id`に等しい

var result = from p in db.population 
       join e in db.engineers.WHERE(c=> c.activity == "student") 
       on p.id equals e.personId into ps 
       from e in ps.DefaultIfEmpty() 
       where (e == null) 
       select p.name; 

var final result = result.Take(100).ToList(); 

または

join e in db.engineers.WHERE(c=> c.activity == "student").Take(100) 
+0

「試してみてください」という提案は投稿しないでください。 *自信を持って質問に答えてください。また、コードを投稿して質問に回答する場合は、なぜ問題が解決したのか説明してください。 –

関連する問題