сходу креативится одно более менее решение, но оно зависит от частоты и объемов удаляемых строк. до определенных цифр( можете посчетать сами )) ) будет работать быстрее оффсета и лимита.- сделать проинтексированный столбец-нумератор как описано выше.
- создать таблицу, в которую будут сохранятся удаляемые идентификаторы.
- написать хранимку, выполняющую следующее:
...
select count(*) into i_count from saved_deleted where some_id<=[offset]; -- счетаем сколько было удалено в оффсете.
select ... where ( row_id >= [offset] - i_count )and( row_id < [offset+limit] - i_count ); -- селектим учитывая поправку на удаленные.
...
периодически можно уплотнять счетчик по крону - черевато блокировкой таблицы на время.
если есть возможность - повторно использовать удаленные идентификаторы.
всегда можно улучшить. все зависит от... )