Проблема: у меня около 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 секунд после присоединения таблицы схем участников + схемы.