Скорость постраничных запросов в Oracle

Это нескончаемая тема для меня, и мне интересно, могу ли я что-то упустить. По сути, я использую в приложении два типа операторов SQL:

  1. Обычные запросы с «резервным» пределом
  2. Сортированные и страничные запросы

Теперь мы говорим о некоторых запросах к таблицам с несколькими миллионами записей, объединенных до еще 5 таблиц с несколькими миллионами записей. Понятно, что мы вряд ли хотим получать их все, поэтому у нас есть два вышеуказанных метода для ограничения пользовательских запросов.

Случай 1 действительно прост. Мы просто добавляем дополнительный фильтр ROWNUM :

WHERE ...
  AND ROWNUM < ?

Это довольно быстро, как Oracle ' из-за сортировки, которая должна применяться перед пейджингом!

Мне интересно, это современная симуляция LIMIT ... OFFSET , включая TOTAL_ROWS в Oracle, или есть лучшее решение, которое будет быстрее по дизайну, например, с использованием оконной функции ROW_NUMBER () вместо псевдоколонки ROWNUM ?

10
задан skaffman 18 May 2011 в 09:07
поделиться