Проблема с подготовкой запроса .NET LINQ - PullRequest
0 голосов
/ 19 апреля 2019

У нас возникла проблема в запросе linq.В запросе выбора несколько таблиц связаны с объединениями.Где фильтры записи были применены в разделе соединения.

Этот запрос работал нормально и дал правильный результат в течение последних 8-9 месяцев.Внезапно потребовалось около 2 минут, чтобы извлечь запись с тем же объединением и потреблением 99% ЦП.

Этот запрос используется всегда при входе пользователя в систему, поэтому он уверен, что в прошлом он работал нормально до момента выпуска.Может ли кто-нибудь помочь, почему эта проблема возникла внезапно?

var entityList = (from x in db.TableA
    join y in db.TableB on x.Id equals y.TableC.TableAId into g
    from d in g.DefaultIfEmpty()
    where d.EndDateTime == null &&
          (d == null || d.TableE.PersonID == personId) &&
          x.EndDateTime == null &&
          d.TableC.EndDateTime == null &&
          x.TableE.PersonID == personId
    select new
    {
        Col1 = d != null ? d.TableC.TableD.Id : 0,
        Col2 = d != null ? d.TableC.Id : 0,
    }).AsQueryable();

1 Ответ

0 голосов
/ 27 апреля 2019

Если эта структура превращает d == null в d = null вместо d IS NULL, это серьезный недостаток.

OR может ухудшить производительность. Вам действительно нужна опция NULL для d? Какие есть индексы?

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