powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / как работает offset x limit y?
21 сообщений из 21, страница 1 из 1
как работает offset x limit y?
    #34760589
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня неприлично долго выполняется запрос типа

select * from t offset 5000000 limit 10

Впечатление такое, что запрос реально выбирает 5 млн, и потмо отдает мне 10 записей
...
Рейтинг: 0 / 0
как работает offset x limit y?
    #34760676
Thamerlan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Winnipuh
Впечатление такое, что запрос реально выбирает 5 млн, и потмо отдает мне 10 записей
Так и есть.
...
Рейтинг: 0 / 0
как работает offset x limit y?
    #34760689
alex_v13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну вообще-то существует команда EXPLAYN :) Его неплохо бы глянуть.
А во вторых, offset+limit работают действительно так.
...
Рейтинг: 0 / 0
как работает offset x limit y?
    #34761002
wbear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
добавлю.. интересный эфект возникает когда делаете limit 1 for update.
...
Рейтинг: 0 / 0
как работает offset x limit y?
    #34763553
ShadyAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> А во вторых, offset+limit работают действительно так.
Накуя??? Тем более что никаких сортировок и группировок в запросе нет.
...
Рейтинг: 0 / 0
как работает offset x limit y?
    #34763644
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShadyAngelНакуя???по определению.
...
Рейтинг: 0 / 0
как работает offset x limit y?
    #34763749
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShadyAngelНакуя???Чтобы подсчитать (и пропустить) кол-во строк равное offset.

ShadyAngelТем более что никаких сортировок ... в запросе нет.Сортировка должна быть, limit нельзя использовать без order by: дока .
...
Рейтинг: 0 / 0
как работает offset x limit y?
    #34763777
Andrey Daeron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShadyAngel> А во вторых, offset+limit работают действительно так.
Накуя??? Тем более что никаких сортировок и группировок в запросе нет.
А такой запрос зачем?
В доке написано - использовать без сортировок можно, но результат не стабилен и зависит от цен на дрова в Зимбабве. Так что запрос можно переписать как:
Код: plaintext
1.
select * from t limit  10 
который будет гораздо быстрее
...
Рейтинг: 0 / 0
как работает offset x limit y?
    #34763785
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeXa NalBat ShadyAngelНакуя???Чтобы подсчитать (и пропустить) кол-во строк равное offset.

ShadyAngelТем более что никаких сортировок ... в запросе нет.Сортировка должна быть, limit нельзя использовать без order by: дока .


Я использую так и работает:
select '40e2381a-e115-4a26-a2a3-5a7712340e0e',x.xstring from xprop x offset 3458189 limit 100

Не нельзя, а рекомендуют

When using LIMIT, it is a good idea to use an ORDER BY clause that constrains the result rows into a unique order. Otherwise you will get an unpredictable subset of the query's rows — you may be asking for the tenth through twentieth rows, but tenth through twentieth in what ordering? You don't know what ordering unless you specify ORDER BY.
...
Рейтинг: 0 / 0
как работает offset x limit y?
    #34763813
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Winnipuh Я использую так и работает:кхм. мдя. смело. и не сетсняицо. смело. мдя. кхм. я бы не признавался. да. О.
...
Рейтинг: 0 / 0
как работает offset x limit y?
    #34764065
ShadyAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
assaпо определению.

По определению сервер БД должен уметь рассчитывать положение N-ой записи в файле данных, так что найти 5миллонную запись и вытащить 10 следующих для него не должно составить труда. Другое дело если используется сортировка.
...
Рейтинг: 0 / 0
как работает offset x limit y?
    #34764096
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShadyAngelПо определению сервер БД должен уметь рассчитывать положение N-ой записи в файле данных, По какому такому определению? В оракле, вон, вообще нет оффсетов и лимитов. И ничего живут. И даже неплохо живут. И даже как-то не возникает вопросов. А здесь им видите ли должны. То сервер должен уметь форматировать дату сам, телепатически, то считать строки должен. А программер должен только одну строчечку написать, и сервер сам все придумает и сделает.
...
Рейтинг: 0 / 0
как работает offset x limit y?
    #34764188
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShadyAngelПо определению сервер БД должен уметь рассчитывать положение N-ой записи в файле данных, так что найти 5миллонную запись и вытащить 10 следующих для него не должно составить труда.НЕТ

Строки в таблице не упорядочены. Равно как и столбцы. :-О

Сервер БД не обязан хранить данные именно в файле. :-)
...
Рейтинг: 0 / 0
как работает offset x limit y?
    #34764668
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShadyAngelПо определению сервер БД должен уметь рассчитывать положение N-ой записи в файле данных, так что найти 5миллонную запись и вытащить 10 следующих для него не должно составить труда. Другое дело если используется сортировка.В базе нет "N-ой записи в файле данных" равно как и нет строки с порядковым номером 5 000 000. Словосочетание "порядок строк в результате запроса без сортировки - неопределен" пишут в любой книжке по SQL в самом начале, на первых страницах. Почитайте на досуге.
...
Рейтинг: 0 / 0
как работает offset x limit y?
    #34764732
alex_v13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ShadyAngel assaпо определению.

По определению сервер БД должен уметь рассчитывать положение N-ой записи в файле данных, так что найти 5миллонную запись и вытащить 10 следующих для него не должно составить труда. Другое дело если используется сортировка.

Сортировка всегда присутствует. Если она не указана, то в качестве порядка используется фактическое положение записей в БД.
Рассчитать положение какой-то определенной записи нельзя, кроме случаев явно указных индексом, т.к. они расположены в файле данных хаотически, в смысле своей логической организации.
...
Рейтинг: 0 / 0
как работает offset x limit y?
    #34764968
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давайте отделять понятия SQL от ExecutionPlan и от DataStorage.

alex_v13Сортировка всегда присутствует. Если она не указана...
Сортировка - этап ExecutionPlan, в котором переупорядочивается набор данных.

Конечно же присутствует не всегда. И указать или не указывать ее явно мы не можем.

Указать в SQL-запросе мы можем порядок (или упорядочивание) с помощью SQL-условия order by.

alex_v13в качестве порядка используется фактическое положение записей в БДЭто, возможно, верно для нынешней версии PG. Нельзя этого утверждать для любой СУБД, или для PG новых версий.

Фактическое положение записей в БД - понятие DataStorage.

alex_v13Рассчитать положение какой-то определенной записи нельзя, кроме случаев явно указных индексомНе понятно. Рассчитать на основании чего, какие входные данные?

Индекс ничего не указывает. Индекс - это вспомогательная структура данных в DataStorage.
...
Рейтинг: 0 / 0
как работает offset x limit y?
    #34765302
alex_v13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LeXa NalBat
Спасибо, что расписали все подробно, но сути этого не меняет.
авторПо определению сервер БД должен уметь рассчитывать положение N-ой записи в файле данных
Это не верно, равно как и запрос
Код: plaintext
...  offset x limit у
выбирающий записи начиная с с заданной.

Сортировка не как часть плана выполнения, но как часть реализации этого запроса и генерации его результата все равно будет, критерии ее я предположил (порядок записей в базе).
...
Рейтинг: 0 / 0
как работает offset x limit y?
    #34765356
Andrey Daeron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_v13
Сортировка всегда присутствует. Если она не указана, то в качестве порядка используется фактическое положение записей в БД.

Не всегда. Если доступ идет по индексу - то нет. Некторые СУБД всегда сортируют на пример по PK. В общем никто ничего никому не гарантирует.

Т.е. неверным будет утверждение что для любой выборки можно указать алгоритм сортировки, без знания внутренностей СУБД. А то что она хоть какая-то будет - ну наверное это нереляционный факт
...
Рейтинг: 0 / 0
как работает offset x limit y?
    #34765505
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_v13Спасибо, что расписали все подробно, но сути этого не меняет.Отсутствие/пренебрежение/искажение определений и терминов мешает пониманию и общению.

alex_v13Сортировка не как часть плана выполнения, но как часть реализации этого запроса и генерации его результата все равно будет, критерии ее я предположил (порядок записей в базе).1. Не путайте "сортировку элементов", как процесс упорядочивания, с "порядком элементов". Словарь: сортировка.

2. "План выполнения" - это и есть описание "реализации запроса", то есть "генерации его результата". Это все одно и то же.
...
Рейтинг: 0 / 0
как работает offset x limit y?
    #34765647
alex_v13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LeXa NalBat

Слегка поспорю, хотя опять же, к вопросу автора темы это уже не имеет никакого отношениия...

2. "План выполнения" - это и есть описание "реализации запроса", то есть "генерации его результата". Это все одно и то же.

"План выполнения" - это именно план, а фактическая его реализация, связанная с функциональным выполнением движком базы своих ф-й есть "реализация запроса", и уже потом это приводит к "генерации его результата".
Да, фактически "сортировка" и "порядок" разные понятия для SQL, но в данном контесте важен именно порядок выдачи данных результата, а получился ли он в результате применения сортировки, или естественным путем - не влияет
...
Рейтинг: 0 / 0
как работает offset x limit y?
    #34765714
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_v13"План выполнения" - это именно план, а фактическая его реализация, связанная с функциональным выполнением движком базы своих ф-й есть "реализация запроса", и уже потом это приводит к "генерации его результата"."План выполнения" - это именно ОПИСАНИЕ "фактической реализации запроса, связанной с функциональным выполнением движком базы своих ф-й". Это одно и то же. докаThe execution plan shows how the table(s) referenced by the statement will be scanned ... what join algorithms will be used to bring together the required rows from each input table.

alex_v13Да, фактически "сортировка" и "порядок" разные понятия для SQLДа, это разные понятия, не только для SQL.

alex_v13в данном контесте важен именно порядок выдачи данных результата, а получился ли он в результате применения сортировки, или естественным путем - не влияетДа, тогда давайте и называть будем своими именами "порядок" - "порядком", а "сортировку" - "сортировкой".
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / как работает offset x limit y?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]