Ускорить процесс выборки из БД

281
17 февраля 2017, 00:34

Есть два класса: сервер и матч.

public class Server
{
    public int Id {get; set;}
    ...
    public virtual ICollection<Match> Matches {get; set;}
}
public class Match
{
    public int Id {get; set;}
    public sting Timestamp {get; set;}
    ...
    public virtual Server Server {get; set;}
}

Между ними связь One-to-many. Нужно посчитать среднее количество матчей в день на каждом сервере.

Сейчас это делаю примерно так (пробовал по-разному): в классе сервер определил метод

public double GetAverageMatchesByDay()
{
    if (Matches.Count == 0) return 0;
    retrun Matches
           .ToList()
           .GroupBy(m => DateTimeOffset.Parse(m.Timestamp).UtcDateTime.Date)
           .Select(g => g.Count())
           .Average();
}

Ну и дальше, где нужно:

foreach(var server in context.Servers)
{
    var averageMatchesPerDay = server.GetAverageMatchesPerDay();    
}

Проблема в том, что при 10 000 серверов и всего лишь по 10 матчей на каждом, это работает уже очень долго, матчей предполагается гораздо больше.

Как правильно реорганизовать связь, либо способ хранения, либо способ выборки всего этого, чтобы скорость ответа не превышала пару секунд?

Заранее спасибо.

READ ALSO
ASP .Net. Как получить данные из WSDL файла?

ASP .Net. Как получить данные из WSDL файла?

У меня есть ссылка на wsdl файлКак мне получить данные по заданному url? Я делаю так:

374
Entity Framework. Помогите с архитектурой

Entity Framework. Помогите с архитектурой

ЗадачаЕсть база фильмов (фильм имеет различные поля, в данном контексте не имеет значение какие)

331
Получить данные из папки

Получить данные из папки

Есть папка которая содержит ещё папки и файлы! Как получить данные из всех файлов находящихся в главной папке?

224
Цикл foreach в переменной

Цикл foreach в переменной

Как можно записать следующий код по-другому?

365