0
IQueryable<WebEvent> mySearch = 
    eventDC.GetBooks()
        .Where(p => p.Price.Any(d => d.EventDatetime.Month == fromDate.Month 
                                     && d.EventDatetime.Year == fromDate.Year))
        .WithGroup(groupId)
        .OrderBy(p => p.Price.Where(r => r.Datetime >= fromDate)
                             .OrderBy(q => q.Datetime)
                             .FirstOrDefault().Datetime);
List<Book>ventsList = mySearch.ToList<Book>();

非常に長いクエリがあり、書籍の取得と並べ替えに多くの時間がかかります。パフォーマンス テストの後、このクエリを含むページの応答時間が 10 秒を超えることがわかりました。これを解決して応答を減らす必要があります。時間。

誰か提案はありますか?

4

2 に答える 2

1

正確に何をしようとしていますか?ここでスキーマのアイデアを教えてもらえますか?

スキーマがわからないので、これは奇妙なステートメントのように思えます。

p => p.Price.Any(d => d.EventDatetime.Month...

ただし、ここで暗闇の中でショットを撮り、次の問題がある可能性があると言います。

eventDC.GetBooks()

そのメソッドがストアド プロシージャを呼び出すか、データベースで "Select * From Books" を実行する場合、実際に行っていることは次のとおりです。

  1. DB からすべての本を選択する
  2. 結果のリストを取得し、その中から必要な本のみを選択します

これが事実である場合、それはおそらくあなたの最大の問題です。

于 2010-01-08T15:32:22.523 に答える
0

通常、SQL を調べて、生成されているものを確認します。これはインラインで実行できます。これを行うのに役立つツールがあります。これは LinqPad と呼ばれ、LINQ クエリを作成し、LINQ クエリを微調整して遊ぶことができます。また、インデックスを追加する場所を探します。これにより、パフォーマンスも向上します (インデックスが多すぎるとパフォーマンスが低下する可能性があるため、注意も必要です)。

于 2010-01-08T16:18:40.107 に答える