powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Сортировка в две стороны на большой таблице
3 сообщений из 3, страница 1 из 1
Сортировка в две стороны на большой таблице
    #35684923
sourcer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть таблица, в ней элементы.

Вот собственно раборта, скорость не устраивает.

EXPLAIN ANALYZE SELECT * FROM items ORDER BY items.price ASC, items.sort_time DESC OFFSET 0 LIMIT 10;

Код: plaintext
1.
2.
3.
4.
5.
6.
"Limit  (cost=27752.10..27752.13 rows=10 width=968) (actual time=652.938..652.944 rows=10 loops=1)"
"  ->  Sort  (cost=27752.10..28177.30 rows=170078 width=968) (actual time=652.936..652.938 rows=10 loops=1)"
"        Sort Key: price, sort_time"
"        Sort Method:  top-N heapsort  Memory: 32kB"
"        ->  Seq Scan on items  (cost=0.00..24076.78 rows=170078 width=968) (actual time=0.005..203.289 rows=170078 loops=1)"
"Total runtime: 652.985 ms"

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

Если сортировка в одну сторону, тоесть items.price DESC, items.sort_time DESC то тут поможет сдвоеный индекс, а вот если в разные как в примере что как быть?

Как ускорить запрос или может идеи есть какие то?
...
Рейтинг: 0 / 0
Сортировка в две стороны на большой таблице
    #35685071
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
create index i1 on items ( items.price ASC, items.sort_time DESC );
...
Рейтинг: 0 / 0
Сортировка в две стороны на большой таблице
    #35685101
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мы же дождались этих плюшек. так давайте ими пользоваться
Код: plaintext
1.
2.
3.
4.
CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] name ON table [ USING method ]
    ( { column | ( expression ) } [ opclass ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...] )
    [ WITH ( storage_parameter = value [, ... ] ) ]
    [ TABLESPACE tablespace ]
    [ WHERE predicate ]
http://www.postgresql.org/docs/current/static/sql-createindex.html

если версия ПЖ не дает задать DESC в CREATE INDEX - попробуйте или ф-й индекс с инверсией поля или создать свой opclass
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Сортировка в две стороны на большой таблице
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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