будет работать быстрее, чем без него?
Везде говорят, что верно, т.к. offset без сортировки будет вынужден пройтись по всем полям таблицы, но я не понимаю зачем
Допустим, есть таблица товаров, на цене висит индекс. При выборке товаров будет выполнен бинарный поиск внутри price_index, а это значит, что внутри индекса товары уже отсортированы
1) Не понимаю, почему offset не может этим "воспользоваться"
2) Не понимаю, почему offsetу важен порядок полей
Грубо говоря, мы говорим базе: "возьми записи начиная с 50-ой", пусть и неотсортированной. Почему нельзя просто взять, и взять?
У тебя таблица в куче?
Вопрос не ясен
Offset без сортировки не имеет никакого смысла
Это понятно, но не ясны детали) Буду очень благодарен, если поможете мои пункты разобрать А то chatgpt уже несколько часов мучаю, у меня путанница в голове 😵💫
Он имеет в виду почему в таком случае (если нет order by) Postgresql не может увидеть, что там есть индекс на столбце с ценой и считать, что это и есть сортировка
Звучит как вещь которая должна сломать 90 процентов постгреса
Хорошо, сформулирую вопрос по-другому: почему offset не может взять данные из неотсортированного результата выборки? Я либо тупой, либо чего-то очень очевидного не замечаю... Почему он вынужден идти по всей таблице, когда результат выборки не отсортирован?? 😫
так сделайте explain anakyze и посмотрите что происходит
А Вы не читайте там, где "говорят", а пробуйте самостоятельно. EXPLAIN (ANALYZE) SELECT * FROM test_select WHERE a_column > 1000000 OFFSET 10 LIMIT 20; Limit (cost=0.72..1.29 rows=20 width=4) (actual time=0.066..0.076 rows=20 loops=1) -> Index Only Scan using test_select_a_column_idx on test_select (cost=0.43..256312.54 rows=9003206 width=4) (actual time=0.058..0.069 rows=30 loops=1) Index Cond: (a_column > 1000000) Heap Fetches: 0 Вопрос исчерпан, по-моему.
На что здесь стоит обратить внимание? Я пытаюсь выяснить, не что происходит, а почему
Вы видите, что индекс в этой ситуации используется, и никакого "пройтись по всем полям таблицы" в плане нет? Следовательно, посылка Вашего вопроса неверна. Какое ещё "почему" Вас тут может интересовать?! ;)
Обсуждают сегодня