Я имею дело с какой-то проблемой здесь.Веб-приложение, созданное на основе java, вызывает хранимую процедуру в oracle, которая имеет в качестве параметров out varchars и параметр, тип которого является курсором ref, возвращающим тип записи (оба явно определены).Содержимое указателя ref собирается с помощью сложного запроса, который, как я предполагаю, запускает O (n) в зависимости от количества записей в таблице.
Идея состоит в том, чтобы разбить результат на сервере, так как вседанные вызывают большую задержку (500 записей занимают около 40-50 секунд из-за расчета и разрешения соединения).Я уже перестроил запрос, используя row_number ()
open out_rcvar for
SELECT *
FROM ( select a, b, c,..., row_number() over (order by f, g) rn
from t1, t2,...
where some_conditions
) where rn between initial_row and final_row
order by rn;
, чтобы избежать подхода с ограничением по смещению (и его эквивалентности в oracle).Но вот в чем проблема, пользователь хочет меню нумерации страниц, как
[first ||<< 5предыдущий ||1 2 3 4 5 ||следующая5 >> ||last]
и знание количества строк подразумевает подсчет (следовательно, «запрос») всего пакета и получение целых 50 сек.Какой подход я мог бы использовать здесь?
Заранее благодарен за вашу помощь.
РЕДАКТИРОВАТЬ: длинный запрос не должен быть установлен как материализованное представление, потому что данные в записях должны быть обновлены какон запрашивается (веб-приложение выполняет некоторые операции с данными и ему необходимо знать, является ли выбранный элемент «доступным» или «проданным»)