0

と を使用して Entity Framework を使用してページングを実装し.skipまし.takeた。これは正常に動作しますが、データベース内のレコード数を 10 万レコード (グリッド ページ番号の UIClient にはカウントが必要です) 取得すると、約 600 ミリ秒という非常に長い時間がかかります。

カウントのみを使用しない場合、ページングのみが実装され、20 ~ 25 ミリ秒しかかかりません。効率よくカウントするには?どうすれば 600 ミリ秒から約 50 ミリ秒に下げることができますか?

私が使用したサンプルクエリ:

int count = (from c in dbcontext.Customer
             where c.customerName ='xyz' && c.date >= 'dateTime'
             select c.CustomerId).Count();

にインデックスNamedateTimeありCustomerId、主キーです。

前もって感謝します、

アビナイ

4

2 に答える 2

1

SQL Server プロファイラーを使用して、エンティティ フレームワークから生成されたクエリを取得し、SQL Server Management Studio のクエリ アナライザーで実行できますか?

そこから実行計画を確認し、ボトルネックが発生している場所を確認し、コードを微調整してパフォーマンスを向上させることができます。

この情報で問題がより明確になると思います。

于 2012-12-12T14:44:57.317 に答える
0

ページネーションの前に既に使用しているレコードでカウントを使用して、パフォーマンスが向上するかどうかを確認してください。

var records = (from c in dbcontext.Customer where c.customerName ='xyz' && c.date >= 'dateTime' select c.CustomerId);

var total = records.Count;
var pagedRecors = records.Skip((currentPage - 1) * recordsPerPage).Take(recordsPerPage).ToList();
于 2012-12-12T14:59:01.390 に答える