Проблема избыточной выборки в List и Catalog

Введение

Рассматривать будем на основе List. Аналогичная история и с компонентом Catalog.  

Кратко - проблема в большом количестве ненужных данных при выборке одной страницы данных (вместо того, чтобы брать атрибуты 20 элементов, берутся атрибуты 20хN, где N - количество страниц). 

В чем проблема? 

В SELECT 5 процедуры Search передаются выводимые элементы каталога.  Здесь мы должны брать только данные нужной там paging страницы. 

В SELECT 6 - атрибуты этих элементов.  Здесь также мы должны учитывать только атрибуты только отобранных через пагинацию элементов. 

Зачастую в SELECT 6 попадают данные всей коллекции - это большой объем. При росте каталога search будет постепенно замедляться. 

Как решить? 

Сначала мы извлекаем нужным нам элементы в таблицу @ids (или временную таблицу #ids).

declare @ids table (id int)
insert into @ids
select ...

Затем нужно извлечь только элементы под пагинацию (с учетом сортировки) в переменную @pageIDs

insert into @pagedIDs
    select dp.id from @ids ids
    join au_projects dp on ids.id = dp.id
    order by 
   case when @sort = 'rating' then rating end desc,
   case when @sort = 'reviews' then reviews end desc,
             case when @sort = 'created' then dp.created end desc,
             case when isnull(@sort,'') = '' then dp.created end desc
    OFFSET @PAGE_SIZE * (@page - 1) ROWS
	FETCH NEXT @PAGE_SIZE ROWS ONLY;

Далее в SELECT 5,6 использовать нужно именно @pagedIDs, а не @ids.

Falcon Space is a functional web development platform on a narrow stack MS SQL/Bootstrap. Falcon Space Gettting started
{sp-shortDemostandLinks}