проблема с лимитом и смещением в sql? - PullRequest
1 голос
/ 04 мая 2011

Ну, у меня есть отсортированная таблица по идентификатору, и я хочу получить n строк со смещением на m строк, но когда я использую ее без упорядочивания, это приводит к непредсказуемым результатам, а с упорядочением по идентификатору это занимает слишком много времени, так как моя таблица уже заказал, я просто хочу получить n строк, оставив первые m строк.

Ответы [ 3 ]

2 голосов
/ 05 мая 2011

Документация гласит:

Планировщик запросов учитывает LIMIT при создании плана запроса, поэтому вы, скорее всего, получите разные планы (с разными порядками строк) в зависимости от того, что вы используете для LIMIT и OFFSET. Таким образом, использование разных значений LIMIT / OFFSET для выбора разных подмножеств результата запроса даст несогласованные результаты , если вы не обеспечите упорядочение прогнозируемого результата с помощью ORDER BY. Это не ошибка; это неотъемлемое следствие того факта, что SQL не обещает доставлять результаты запроса в каком-либо конкретном порядке, если только ORDER BY не используется для ограничения порядка.

Так что то, что вы пытаетесь, на самом деле не может быть сделано.

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

1 голос
/ 05 мая 2011

Как указывалось выше, SQL не гарантирует ничего о порядке, если у вас нет предложения ORDER BY. LIMIT все еще может быть полезен в такой ситуации, но я не могу думать о каком-либо использовании для OFFSET. Похоже, у вас нет индекса по id, потому что если вы делаете, запрос должен быть очень быстрым, кластеризованным или нет. Посмотрите еще раз на это. (Также отметьте CLUSTER, который может улучшить вашу производительность на полях.)

ПОВТОР: это не что-то о Postgresql. Его поведение здесь соответствует.

1 голос
/ 04 мая 2011
SELECT * FROM mytable LIMIT 100 OFFSET 0

Вы действительно не должны полагаться на неявное упорядочение, потому что вы не сможете предсказать точный порядок того, как данные поступают в базу данных.

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