Привет! Почему offset не может взять данные прямо из неотсортированного

результата выборки?

Почему он вынужден идти по всей таблице, когда результат выборки не отсортирован?

Все ответы, которые я слышу: "это потому что данные не отсортированы", но это не ответ на мой вопрос..

Буду крайне благодарен, если поможете. Сижу на этим уже со вчерашнего дня

11 ответов

30 просмотров

Хочешь получить на выходе говно?

убери offset, оставь limit -эффект будет такой же.

А4 Одноногое- Автор вопроса
Ilya Zviagin
Хочешь получить на выходе говно?

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

Он не вынужден. Ты лучше пришли описание таблиц (DDL) и запрос, и тогда можно обсудить.

А4 Одноногое- Автор вопроса
Ilya Zviagin
Он не вынужден. Ты лучше пришли описание таблиц (...

Мне везде говорят (вот абсолютно везде), что offset будет считывать всю таблицу, если результат выборки не отсортирован

А4 Одноногое
Мне везде говорят (вот абсолютно везде), что offse...

Однозначно без запроса это сказать нельзя. Да и с запросом тоже, план составляет СУБД, и она может делать это как угодно. Я бы на месте производителя СУБД OFFSET без ORDER BY просто игнорировал бы

А4 Одноногое
Мне везде говорят (вот абсолютно везде), что offse...

зачем тебе вообще OFFSET - это же идиотская конструкция ...

А4 Одноногое- Автор вопроса
А4 Одноногое
Для пагинации. Есть альтернативы?

Пагинацию вообще не надо делать, надо её выбрасывать.

Не по всей, а только offset+limit. Но если limit не указан, тогда что есть offset (получаем строки с n позиции), что нет (получаем все строки). Особой разницы не будет(в случае, если не используется ключ). Это всего лишь маркер с какой строки начинать отдачу данных. И именно с этим и связана концепция, что если запрос возвращает более 500 записей (у каждого это своя граница), значит пользователь делает что то не так. Такое допустимо только в процессах, где пользователь не участвует (импорты/экспорту/конвертации/автоматические обработки данных), но там и offset как раз таки обычно не нужен, там как раз используют last row id of previous query + limit. Более того, сортировка вообще не влияет на скорость offset. Если сделать селект по обычной таблице без условий where, то очевидно, что будут браться строки по первичному ключу, который отсортирован. И вот именно по таблице ключей и можно применить offset и limit и по выбранным ключам уже строить результат. Если запрос сложный, то там у итогового результата может и не быть конечного ключа или сортировка не по ключевому полю, и тогда тут offset применится к результату выборки. Но опять же повторюсь. Результат может давать и 10 строк и 1000000 строк и скорость будет падать при отборе, а не применении offset.

Похожие вопросы

Обсуждают сегодня

кто тебе сказал, что она угроблена? многие только начинают жизнь, после увольнения из Гугла, Майкрософта, Оракла,...
Alex Kom
9
В альтернативе у нас сидеть горбатиться на дядю в галерах, пока не помрешь или пока тебя не заменят более молодым сотрудником, который готов гребсти в два раза дешевле. Вот и ...
Кабан Кабанов
7
Или ты челендж хочешь?
Ilya Shvechikov
7
сори за оффтоп, но просто в тему https://www.youtube.com/watch?v=8Q_YfcpgdGU
Alex Kom
5
По какой цене продают скрипты анонимного чата? Я за 500 даже готов 😂😂😂
Ilya Shvechikov
5
делал кто-то на питоне аппки под ведроид? Я прост думаю с киви начать но чето такое, мб есть более простые способы сбилдить
ռɛ ʋɛʀʍօʀɛ
5
Так а кто может спарсить всех участников чата? Идишники
Magic
18
да пофиг на капчу зашел в чат и молчишь при этом ты нонейм? пошел вон
Magic
17
Всем привет) Я попробовал турбо роутер октябрьский. Вроде доволен, но возникла проблемка) Бутстраповские модалки плодят .modal-backdrop элементы Если модалка открыта, должне...
Виталий
3
Всем привет) Есть интересующиеся криптой?) Возможно кто на пути изучения - помогу советом, исходя из личного опыта) Также есть обучающий материал и курсы, видео-уроки и отличн...
Day
2
Карта сайта