Скорее всего, вы захотите воспользоваться преимуществами оптимизации с помощью Oracle, поэтому у вас не будет полного сканирования таблиц, когда вы этого не хотите. Есть несколько способов сделать это. Первый способ написать немного дольше, но давайте автоматически определим количество задействованных строк в Oracle:
select *
from
(
select rownum rn, v1.*
from (
select *
from table t
where filter_columns = 'where clause'
order by columns_to_order_by
) v1
where rownum <= 200
)
where rn >= 101;
Вы также можете достичь того же с подсказкой FIRST_ROWS:
select /*+ FIRST_ROWS(200) */ *
from (
select rownum rn, t.*
from table t
where filter_columns = 'where clause'
order by columns_to_order_by
) v1
where rn between 101 and 200;
Я очень предпочитаю метод rownum, поэтому вам не нужно постоянно изменять значение в подсказке (которое должно представлять конечное значение, а не количество строк, фактически возвращаемых на страницу, чтобы быть точными). Таким образом, вы можете установить начальные и конечные значения как переменные связывания, чтобы избежать жесткого анализа.
Для более подробной информации, вы можете проверить этот пост