Мне также нужна помощь по поисковому вызову и использованию UNION ALL
для нескольких таблиц:
Как реализовать оптимизированный пейджинг при объединении нескольких таблиц с помощью UNION ALL
и возвращении только определенного количества строк...
declare @startRow int
declare @PageCount int
set @startRow = 0
set @PageCount = 20
set rowcount @PageCount
select Row_Number() OVER(Order by col1) as RowNumber, col1, col2
from
(
select col1, col2 from table1 where datetimeCol between (@dateFrom and @dateTo)
union all
select col1, col2 from table2 where datetimeCol between (@dateFrom and @dateTo)
union all
select col1, col2 from table3 where datetimeCol between (@dateFrom and @dateTo)
union all
select col1, col2 from table4 where datetimeCol between (@dateFrom and @dateTo)
union all
select col1, col2 from table5 where datetimeCol between (@dateFrom and @dateTo)
) as tmpTable
where RowNumber > @startRow
Таблица 3, 4 и 5 имеют огромное количество строк (миллионы строк), где таблицы 1 и 2 могут содержать только несколько тысяч строк.
Если startRow является "0", я ожидаю только данные от строки 1 до 20 (из таблицы 1). Я получаю правильный результат, но с большой накладной на оставшейся таблице, в то время как sql-сервер пытается получить все данные и фильтровать его....
чем дольше интервал @dateFrom и @dateTo делает мой запрос значительно медленнее при попытке получить только несколько строк из общего набора результатов
Пожалуйста, помогите, как я могу реализовать простой, но лучший подход с аналогичной логикой.: (