2012-04-28 16 views
0

ユーザ統計テーブルから過去50レコードを取得する必要があります(テーブルには100万以上のレコードがあります)。下のクエリを実行すると、応答が非常に遅くなり、IIS7のプールメモリ使用量が最大800 MBにジャンプします。クエリはSQL Server上で実行され、アプリケーション自体では実行されないと考えました。このクエリを最適化するには?サーバ上でクエリを実行する

user.Statistics.OrderByDescending(p => p.DateStamp).Take(50); 

答えて

1

このクエリはサーバー上で実行されます。私の推測では、DateStamp列に適切なインデックスがないため、クエリが遅いということです。

LinqPadのコピーを入手することを強くお勧めします(まだコピーをお持ちでない場合)、LinqPadでこのクエリを実行し、サーバーにT-SQLが送信されていることを確認してください)、T-SQLをとり、SSMSのクエリ実行計画を見てください。インデックス検索の代わりに、テーブルスキャンが実行されていると思います。

適切なインデックスを使用すると、テーブル内の行数が1,000万であっても、このクエリは最大でも<で1-2秒実行されます。

関連する問題