На этот похожий вопрос есть очень подробные ответы , но я постараюсь сделать их конкретными для вашего случая.
Во-первых, когда вы говорите "последние 100 тыс. Строк", что вы имеете в виду? Похоже, вы просто хотите извлечь последние 100 тыс. Строк из несортированного запроса, но это не имеет большого смысла. Если вам нужны самые последние 100k строк , Oracle не гарантирует, что они будут в конце вашего несортированного запроса. Итак, вы хотите заказать по что-то , которое будет иметь самые последние из них в конце.
Кроме того, отчасти ваш запрос медленный, потому что вы сортируете / фильтруете псевдостолбец rownum , который не может быть проиндексирован. Сортировка по столбцу с индексом значительно ускорит это. Поэтому я думаю, вы хотите упорядочить по столбцу id , который, вероятно, является уникальным / первичным ключом.
Так что это старый (11g и более ранние) способ сделать это.
select id, name
from (select id, name
from MILLION_1
order by id desc)
where rownum < 100000;
Если вы используете 12с или позже, есть более новый способ сделать это.
select id, name
from MILLION_1
order by id desc
fetch first 100000 rows only;