Производительность запросов EF Core 3.1 - PullRequest
1 голос
/ 04 мая 2020

Я учусь asp. net core mvc 3.1. И не могу понять, почему мой запрос такой медленный. Вот сгенерированный запрос EFCore (скопированный из DebugConsole)

SELECT [p].[TagID], 
   [p].[CategoryID], 
   [p].[PicID], 
   [p].[TagSysType], 
   [p].[TagDescription], 
   [p].[TagPriority], 
   [p].[TagName], 
   [p].[TagTypeID], 
   [p].[PeriodID], 
   [p].[LinkID], 
   [p].[SourceID], 
   [p0].[LinkID], 
   [p0].[LinkLongName], 
   [p0].[LinkName], 
   [p1].[PeriodID], 
   [p1].[PeriodName], 
   [s].[SourceID], 
   [s].[CategoryID], 
   [s].[SourceName], 
   [s].[SourcePriority], 
   [p2].[TagTypeID], 
   [p2].[TagTypeName], 
   [e].[PicID], 
   [e].[PicName], 
   [c].[CategoryID], 
   [c].[CategoryGroupID], 
   [c].[CategoryName], 
   [a].[TagID], 
   [a].[Cost], 
   [a].[Scale], 
   [a].[Date], 
   [a].[Partner]
   FROM [Tag] AS [p]
          INNER JOIN [Link] AS [p0] ON [p].[LinkID] = [p0].[LinkID]
          INNER JOIN [Period] AS [p1] ON [p].[PeriodID] = [p1].[PeriodID]
          INNER JOIN [Source] AS [s] ON [p].[SourceID] = [s].[SourceID]
          INNER JOIN [TagType] AS [p2] ON [p].[TagTypeID] = [p2].[TagTypeID]
          LEFT JOIN [Pic] AS [e] ON [p].[PicID] = [e].[PicID]
          INNER JOIN [Category] AS [c] ON [p].[CategoryID] = [c].[CategoryID]
          LEFT JOIN [Sale] AS [a] ON [p].[TagID] = [a].[TagID]

Результат этого запроса содержит около 10000 строк, и они мне нужны в моем приложении (без фильтрации). Проблема в том, что время выполнения этого запроса составляет около 25 секунд. Я думал, что это слишком сложный запрос (с большим количеством JOIN) для базовой технологии net или ужасной архитектуры базы данных, но когда я запускаю этот запрос в SQL Studio Management, он выполняется почти мгновенно, если мое приложение в студии остановлено. Если мое приложение работает, время выполнения запроса в SQL Studio Management также занимает около 25 секунд. Приложение (Net core 3.1) и база данных (SQL2008) работают на одном сервере (Win2012).

Почему это происходит?

Мое действие в контроллере:

    public IActionResult Index()
    {
        ViewBag.PagingVisible = false;

        IQueryable<Tag> tags = _context.Tag
                                .Include(s => s.Link)
                                .Include(s => s.Period)
                                .Include(s => s.Source)
                                .Include(s => s.TagType)
                                .Include(s => s.Pic);
                                .Include(s => s.Category);
                                .Include(s => s.Sale);

        return PartialView("_SearchResult", tags.ToList());
    }
...