Comments 9
LIMIT, FETCH FIRST, OFFSET
Вы располагаете информацией, что реализация указанных конструкций в чём-то различается? Потому как всё, что написано в документации, наводит на мысль, что это всё разные синтаксические формы одной и той же сущности. И ещё неизвестно, что из них чему есть синтаксический сахар.
Кстати, а почему тестируется связка OFFSET+FETCH, но не тестируется связка OFFSET+LIMIT? Нет, я понимаю, что четвёртый раз делать одно и то же странно, но чисто в порядке строгости эксперимента...
А где самая эффективная связка?
limit + where по колонкам из order
Самая неэффективная - row_number.
Разница между другими способами - в рамках статистической погрешности
Что касается получения первой страницы результатов, разница в скорости между методами LIMIT, FETCH FIRST и OFFSET практически незаметна — все они работают быстро и стабильно.
Выбор между этими тремя методами чаще всего зависит не от производительности, а от удобства реализации и необходимости поддержки перехода к следующим страницам данных.
Осталось прояснить два момента:
Кто делает пагинацию через row_number?
Чем с технической точки зрения остальные варианты различаются между собой?
Кто делает пагинацию через row_number?
Теоретически - есть сценарий при котором row_number будет эффективнее.
Эксперимент, с целью проверки, запланирован на следующей неделе .
Добавьте фильтрацию, почти всегда при пагинации ставят динамические фильтры на колонках и сортировка также динамически выбирается из ui, если в where придет очень редкое значение то люкапы на весь объем вполне могут быть медленнее чем hash джойн.
В целом странное сравнение одной первой страницы и без фильтров.
Это как будто и так очевидно было изначально. Ведь row_number - это по сути отдельный запрос. И понятно, что он будет обрабатывать всю таблицу целиком
Такое ощущение, что основа статьи сгенерирована нейронкой с вкрапленим отсебятины. Уже столько раз эта тема обмусоливалась с пагинацией, а тут такое ощущение, что америка открывается.
Очередной раз к подобной статье задам вопрос: зачем вам глубокая пагинация на РСУБД?
Пагинация в PostgreSQL: ROW_NUMBER убивает производительность