Reputation: 6151
I am using EF5
with the MoreLinq
extenstion, while testing my program in production (very big database), I found out that the line:
var x = db.TheBigTable.MaxBy(x => x.RecordTime);
Takes very long time (RecordTime
is a non-indexed datetime
)
Is that because MaxBy
always runs on the client side (and firstly gets ALL records from the database)?
Upvotes: 5
Views: 11123
Reputation: 217341
Here is the signature of the MaxBy
extension method:
public static TSource MaxBy<TSource, TKey>(this IEnumerable<TSource> source,
Func<TSource, TKey> selector)
{
return source.MaxBy(selector, Comparer<TKey>.Default);
}
It returns the maximal element (based on the given projection) of an IEnumerable<T>
, not an IQueryable<T>
. So the results of the query db.TheBigTable
are indeed all loaded into memory first, and then they are iterated to find the maximum.
Upvotes: 9