Проблема избыточной выборки в 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 - функциальная веб-платформа разработки на узком стеке MS SQL/Bootstrap. Вводная по Falcon Space
Насколько полезной была статья?

Google поиск по нашей документации

Falcon Space

Это снижение стоимости владения

за счет меньшего количества людей для поддержки и узкого стека разработки. Про снижение стоимости владения продуктом

Это быстрое внесение изменений

по ходу эксплуатации программы. Как создается функционал на платформе

Это простой удобный интерфейс

адаптация под мобильные устройства. Про юзабилити платформы