Как можно было бы пойти о записи запроса, который выбирает объекты 2000-2010 из набора 10 000 объектов в хранилище данных.
Я знаю, что это может быть сделано как это в GQL:
select * from MyObject limit 10 offset 2000
Согласно документации, при использовании offset
механизм все еще выберет все строки, только не возвращают их, таким образом заставляя запрос работать способом, который соответствует линейно значению offset
.
Есть ли какой-либо лучший путь? Такой как использование псевдо ROWNUM
столбец как можно было сделать в других типах хранилищ данных.
Невозможно эффективно постранично использовать смещения, кроме как кэшировать результаты. Однако вы можете использовать курсоры хранилища данных для реализации разбиения на страницы с использованием подхода типа «закладки».
Помимо курсоров, вы также можете использовать метод сортировки. Например:
SELECT * FROM MyObject ORDER BY field LIMIT 10;
для первых 10 объектов, а затем для следующих 10 объектов и т. Д.
SELECT * FROM MyObject WHERE field > largestFieldValueFromPreviousResult ORDER BY field LIMIT 10;
Поле может быть даже ключевым, если у вас нет другого подходящего поля. Вот более полный пример: