LIMIT и OFFSET позволяют извлечь только
часть строк, сформированных остальной частью запроса:
команда SELECTselect_listпредложение FROMtable_expression[ ORDER BY ... ] [ LIMIT {число| ALL } ] [ OFFSETstart]
Если указано ограничение количества (limit count), будет возвращено не более чем заданное количество строк (но, возможно, меньше, если сам запрос возвращает меньше строк).
LIMIT ALL равносильна отсутствию LIMIT
предложения, как и инструкция LIMIT с аргументом NULL.
OFFSET указывает пропустить заданное количество строк перед началом возврата набора данных. OFFSET 0 равносильно пропуску
OFFSET предложения, как и в случае с OFFSET с аргументом NULL.
Если указаны оба OFFSET
и LIMIT , то сначала OFFSET строк
пропускаются перед началом подсчета LIMIT строк,
которые возвращаются.
При использовании LIMIT, важно также использовать
ORDER BY предложение, которое строго определяет уникальный порядок результирующих строк. В противном случае вы получите непредсказуемое подмножество строк запроса. Вы можете запрашивать строки с десятой по двадцатую, но в каком именно порядке они должны следовать? Порядок сортировки не определен, если только вы не указали ORDER BY.
Оптимизатор запросов учитывает LIMIT принимаются во внимание при генерации планов запросов, поэтому существует большая вероятность получения разных планов (дающих разный порядок строк) в зависимости от параметров, указанных для LIMIT и OFFSET. Таким образом, использование
различных LIMIT/OFFSET значений для выбора
разных подмножеств результата запроса приведет к
получению несогласованных результатов если только вы не обеспечите предсказуемый порядок результатов с помощью ORDER BY. Это не является ошибкой; это
является неизбежным следствием того факта, что SQL не гарантирует
выдачу результатов запроса в каком-либо определенном порядке, если только
ORDER BY не используется для упорядочивания.
Строки, пропущенные при использовании предложения OFFSET все равно должны быть
вычислены на стороне сервера; следовательно, большое значение OFFSET
может быть неэффективным.