C # Entity Framework, включая соседние таблицы с ужасной производительностью include () - PullRequest
0 голосов
/ 03 января 2019

У меня есть запрос, который выглядит следующим образом:

users = ctx.SearchedUsers.AsNoTracking()
           .IncludeEFU(ctx,c=>c.SearchedUserItems)
           .IncludeEFU(ctx,c=>c.UserTransactions)
           .Where(y => y.InQueue == false && 
                       y.LastTimeSearchedAt.Value > inPast10Dayss)
           .OrderBy(y => y.LastUpdatedAt)
           .Take(100).ToList();

Метод IncludeEFU() вызывается из библиотеки EFUtilities, которую я получил отсюда:

https://github.com/MikaelEliasson/EntityFramework.Utilities

И другая версия этого запроса (с использованием обычного include) выглядит так:

users = ctx.SearchedUsers.AsNoTracking()
           .Include("SearchedUserItems")
           .Include("UserTransactions")
           .Where(y => y.InQueue == false && 
                       y.LastTimeSearchedAt.Value > inPast10Dayss)
           .OrderBy(y => y.LastUpdatedAt)
           .Take(100).ToList();

Теперь оба этих запроса дают ужасные результаты производительности, когда взятие 100 записей из таблицы SearchedUsers и примерно от 2000 до 5000 записей в двух соседних таблицах SearchedUserItems и UserTransactions занимает от 2 до 5 минут. ...

То, что я сделал ранее, это извлечение записей для каждой записи из таблицы SearchedUser, а затем извлечение соседних записей через FK (который индексируется в обеих таблицах для повышения производительности).

Теперь мой вопрос здесь ... Есть ли более быстрый способ включить эти записи в один запрос, чтобы мне не приходилось извлекать их одну за другой эффективным способом?

Может кто-нибудь мне помочь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...