Oracle SQL запрос для получения данных на странице с динамическим размером? - PullRequest
0 голосов
/ 22 февраля 2012

Допустим, есть таблица с n строками.

Я хочу установить переменные:
numberOfPages = 10 (размер страницы должен быть динамическим)
pageToGet = 2;

Возможно ли получить нужную страницу без указания размера страницы и количества строк в таблице?

Ответы [ 2 ]

2 голосов
/ 22 февраля 2012

Попробуйте NTILE():

WITH paginated AS (
  SELECT
    <i>columns</i>,
    NTILE(<i>numberOfPages</i>) OVER (ORDER BY <i>what?</i>) AS pageNum
  FROM <i>table</i>
)
SELECT
  <i>columns</i>
FROM paginated
WHERE pageNum = <i>pageToGet</i>
0 голосов
/ 22 февраля 2012

Множество статей для запросов разбивки на страницы Oracle, но я обычно использую:

select * from (
  select a.*, rownum r
  from (
    select *
    from your_table
    where ...
    order by ...
  ) a
  where rownum <= :upperBound
)
where r >= :lowerBound;

Требуется упорядочение по, но я обычно использую индексированные столбцы, а использование rownum означает, что Oracle может использовать оптимизацию с помощью клавиши остановки. Таким образом, не обязательно делать полное сканирование таблицы.

Итак, если у вас есть 100 строк на странице, и вы хотите страницу 3, ваш lowerBound = 301 и upperBound = 400.

Использование NTILE, как советует AndriyM, является хорошим ответом, если вы абсолютно не можете указать размер страницы, но я полагаю, что вы увидите определенные потери производительности на больших таблицах (я полагаю, что нет оптимизации с помощью клавиш остановки). Именно поэтому я опубликовал это, чтобы вы могли сравнить производительность и посмотреть, имеет ли смысл динамический размер страницы для вашего приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...