2009-07-18 12 views
0

私はlinqtosqlクエリフィルタリングと20秒間実行するdatecolumnで注文する必要があります。生成されたsqlqueryをDB上で直接実行すると、0秒後に戻ります。LinqToSQL DateTimeフィルタ?

var myObjs = DB.Table 
.Where(obj => obj.DateCreated>=DateTime.Today) 
.OrderByDescending(obj => obj.DateCreated); 

テーブルには100,000レコードしかなく、DateTime列にはインデックスが付けられています。

linqtosqlパフォーマンス苦情の長い行にちょうど別のものがあります。しかし、この1つは悪いです、私は間違ったことをしているに違いないと確信しています。

答えて

1

私は、生成されたクエリの実行には0秒しかかかりませんが、それは、Enterprise Managerのようなものを使用している場合に実際にすべての結果を表示していないからです。すべてのデータを100,000の結果にフェッチ(および逆シリアル化)するだけでかなりの時間がかかることがありますが、手動によるクエリでは最初の20回のヒットなどが表示されます。

.NETで同じSQLを実行し、DataReaderを使用してすべてのデータをフェッチすると、どれくらいの時間がかかりますか?

プロファイルを有効にしてサーバーを実行すると、クエリがLINQからSQLに実行されるまでにどれくらいの時間がかかりますか?

0

質問に間違いはありません。 Linqによって生成されたT-SQLを見ることは素晴らしいことです。それを試しましたか?

1

ありがとうございました...

問題は私のもので、linqのものではありません。簡潔にするために質問のクエリを短縮しましたが、実際にはNONインデックス付き列に適用された別のフィルタがありました。インデックスを追加することで問題は解決しました。

Jon Skeet氏が提案したように、Sql Mgmt Studioでクエリを実行すると、クエリがページングされ、非常に迅速にトップ20行が返されて誤った印象を受けました。 linqが責任を負うと思った。だからインデックス問題は、linqではなく、SQLのmgmtスタジオで現れた。