Проблема избыточной выборки в 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

В 2-3 раза экономнее и быстрее, чем заказная разработка
Более гибкая, чем коробочные решения и облачные сервисы
Используйте готовые решения и изменяйте под свои потребности
Нужна бесплатная консультация?
Планируете делать веб-проект?
Сайт использует Cookie. Правила конфиденциальности OK