私は拡張機能を使用EF5
していMoreLinq
ます。本番環境(非常に大きなデータベース)でプログラムをテストしているときに、次の行が見つかりました:
var x = db.TheBigTable.MaxBy(x => x.RecordTime);
非常に時間がかかります (RecordTime
インデックスが作成されていませんdatetime
)
これは、MaxBy
常にクライアント側で実行される (そして最初にデータベースからすべてのレコードを取得する) ためですか?
私は拡張機能を使用EF5
していMoreLinq
ます。本番環境(非常に大きなデータベース)でプログラムをテストしているときに、次の行が見つかりました:
var x = db.TheBigTable.MaxBy(x => x.RecordTime);
非常に時間がかかります (RecordTime
インデックスが作成されていませんdatetime
)
これは、MaxBy
常にクライアント側で実行される (そして最初にデータベースからすべてのレコードを取得する) ためですか?
public static TSource MaxBy<TSource, TKey>(this IEnumerable<TSource> source,
Func<TSource, TKey> selector)
{
return source.MaxBy(selector, Comparer<TKey>.Default);
}
IEnumerable<T>
ではなく、の最大要素 (指定された射影に基づく) を返しますIQueryable<T>
。したがって、クエリの結果db.TheBigTable
は実際にはすべて最初にメモリにロードされ、次に最大値を見つけるために反復されます。