Как Linq объединяет результат множественного выбора - PullRequest
0 голосов
/ 18 октября 2018

Проблема: у меня около 6 миллионов записей в таблице-члене, она становится очень медленной при поиске с содержанием ('LIKE') после объединения таблиц

Предположим, у меня есть следующие таблицы,

member: id, имя_члена

member_scheme: member_scheme_id, member_id, sche__id

схема: имя_схемы, код_схемы

1 - много - 1

и я хочу выполнить предварительный поиск по 'LIKE' в основной таблице, а затем объединить результат в вложенной таблице, чтобы получить код_схемы

Как я могу архивировать SQL таким образом в Linq?

SELECT T2.code, * FROM (
    SELECT * FROM member as [Source1]
    WHERE [Source1].[member_name] LIKE '%TEST NAME%' ESCAPE N'~'
    ORDER BY [Source1].[id] DESC
    OFFSET 0 ROWS FETCH NEXT 100 ROWS ONLY
) T1
LEFT JOIN
(SELECT Source2.member_id, Source3.code FROM member_scheme as [Source2]
JOIN scheme as [Source3] ON Source3.scheme_id = Source2.scheme_id
) T2
ON T1.member_id = T2.member_id

Я пробовал навигационное свойство раньше, чем

    var memberRecords = db.Members.Select(mb => new ViewModel()
    {                
        MemberCode = mb.Code,
        SchemeCode = mb.MemberSchemes.FirstOrDefault().Scheme.Code,
    }).OrderByDescending(n => n.ID).AsQueryable();

memberRecords = memberRecords.Where(r => r.MemberCode.Contains("TEST NAME"));

, и оно стало очень медленным, объединяя результат, который не соответствует каждой строке (например, 20-90 секунд).

, поэтому моя идея состоит в том, чтобы сначала отфильтровать запись по «LIKE», я попытался найти только таблицу элементов с «LIKE», а затем присоединиться, для возврата результата требуется всего 1-2 секунды., однако это происходит через 20 секунд после присоединения таблицы схем участников + схемы.

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