У меня есть хранимая процедура, на которой я должен использовать нумерацию страниц, чтобы получить записи для сетки. Запрос отлично работает для одной таблицы, однако, как только я начинаю добавлять в левое соединение, все становится все медленнее и медленнее. Простой запрос к странице 10 записей занимает 1 секунду с одной таблицей, но 3 минуты с 2 левыми соединениями. Все таблицы имеют индексы на них. Есть ли лучший, более эффективный способ написать это с помощью левых соединений? Возможно, подзапрос?
DECLARE
@Declare PersonNumber XML,
@PageSize INT = 10,
@PageNum INT = 1;
WITH TempResult AS
(
SELECT ID, Name
FROM Table T
LEFT JOIN Table A ON a.Id = T.Id
LEFT JOIN Table B ON B.Id = A.Id
AND B.Date = A.DATE
AND B.IsActive = 1
), TempCount AS
(
SELECT COUNT(*) AS MaxRows
FROM TempResult
)
SELECT *
FROM TempResult, TempCount
ORDER BY TempResult.Name
OFFSET (@PageNum - 1) * @PageSize ROWS
FETCH NEXT @PageSize ROWS ONLY
Нужные столбцы проиндексированы.