Size: a a a

pgsql – PostgreSQL

2020 July 31

АК

Андрей Казанцев... in pgsql – PostgreSQL
Эффективно?
источник

VY

Victor Yegorov in pgsql – PostgreSQL
а вариантов не особо много. вам надо получить строку и заменить значение (суть всю строку в Postgres-е). тут уже на запрос смотреть надо
источник

НК

Никита Карпеев... in pgsql – PostgreSQL
Люди добрые, подскажите или направьте в верном направлении
есть следующий запрос
SELECT "lot".*, "torg"."published_at"
FROM "eidb"."lot"
        LEFT JOIN "eidb"."torg" ON "eidb"."lot"."torg_id" = "eidb"."torg"."id"
ORDER BY "torg"."published_at" DESC
LIMIT 8;

как можно ускорить сортировку в данном примере?

EXPLAIN
Limit  (cost=206165.73..206166.66 rows=8 width=1034)
 ->  Gather Merge  (cost=206165.73..260276.71 rows=463776 width=1034)
       Workers Planned: 2
       ->  Sort  (cost=205165.71..205745.43 rows=231888 width=1034)
             Sort Key: torg.published_at DESC
             ->  Parallel Hash Left Join  (cost=6874.35..200527.95 rows=231888 width=1034)
                   Hash Cond: (lot.torg_id = torg.id)
                   ->  Parallel Seq Scan on lot  (cost=0.00..193044.88 rows=231888 width=1026)
                   ->  Parallel Hash  (cost=6065.82..6065.82 rows=64682 width=16)
                         ->  Parallel Seq Scan on torg  (cost=0.00..6065.82 rows=64682 width=16)

так понимаю, что созданный индекс
create index "idx-torg-published_at-desc"
   on eidb.torg (published_at desc);
в запросе не используется
источник

VY

Victor Yegorov in pgsql – PostgreSQL
на eidb.lot.torg_id индекс есть?
источник

НК

Никита Карпеев... in pgsql – PostgreSQL
Victor Yegorov
на eidb.lot.torg_id индекс есть?
нет
источник

VY

Victor Yegorov in pgsql – PostgreSQL
также я бы попробовал ON eidb.torg (id, published_at DESC)
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Никита Карпеев
Люди добрые, подскажите или направьте в верном направлении
есть следующий запрос
SELECT "lot".*, "torg"."published_at"
FROM "eidb"."lot"
        LEFT JOIN "eidb"."torg" ON "eidb"."lot"."torg_id" = "eidb"."torg"."id"
ORDER BY "torg"."published_at" DESC
LIMIT 8;

как можно ускорить сортировку в данном примере?

EXPLAIN
Limit  (cost=206165.73..206166.66 rows=8 width=1034)
 ->  Gather Merge  (cost=206165.73..260276.71 rows=463776 width=1034)
       Workers Planned: 2
       ->  Sort  (cost=205165.71..205745.43 rows=231888 width=1034)
             Sort Key: torg.published_at DESC
             ->  Parallel Hash Left Join  (cost=6874.35..200527.95 rows=231888 width=1034)
                   Hash Cond: (lot.torg_id = torg.id)
                   ->  Parallel Seq Scan on lot  (cost=0.00..193044.88 rows=231888 width=1026)
                   ->  Parallel Hash  (cost=6065.82..6065.82 rows=64682 width=16)
                         ->  Parallel Seq Scan on torg  (cost=0.00..6065.82 rows=64682 width=16)

так понимаю, что созданный индекс
create index "idx-torg-published_at-desc"
   on eidb.torg (published_at desc);
в запросе не используется
А в чём цель этого запроса, ради любопытства (он же недетерминированный, на первый взгляд)?
источник

НК

Никита Карпеев... in pgsql – PostgreSQL
получить лоты с самыми свежими торгами
источник

АЛ

Аггей Лоскутников... in pgsql – PostgreSQL
А нужны ли лоты, в которых торгов нет?
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Никита Карпеев
получить лоты с самыми свежими торгами
Произвольные / случайные 8 (если published_at совпадут)?
источник

АЛ

Аггей Лоскутников... in pgsql – PostgreSQL
Аггей Лоскутников
А нужны ли лоты, в которых торгов нет?
Left join же их тоже включит
источник

НК

Никита Карпеев... in pgsql – PostgreSQL
Аггей Лоскутников
А нужны ли лоты, в которых торгов нет?
inner join? почти каждый лот привязан к торгу
источник

АЛ

Аггей Лоскутников... in pgsql – PostgreSQL
Никита Карпеев
inner join? почти каждый лот привязан к торгу
И все же планировщик сможет выбрать другой план
источник

НК

Никита Карпеев... in pgsql – PostgreSQL
пробовал на самом деле inner, по времени результат тот же примерно, 4-5 сек, а хочется быстрее
источник

НК

Никита Карпеев... in pgsql – PostgreSQL
Yaroslav Schekin
Произвольные / случайные 8 (если published_at совпадут)?
не совсем понял, имеете ввиду отказаться от сортировки?
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Никита Карпеев
не совсем понял, имеете ввиду отказаться от сортировки?
Я имею в виду, что на те же данных (при условии наличия одинаковых published_at) этот запрос может выдавать раз от раза разные результаты. Вас это устраивает?
источник

НК

Никита Карпеев... in pgsql – PostgreSQL
Yaroslav Schekin
Я имею в виду, что на те же данных (при условии наличия одинаковых published_at) этот запрос может выдавать раз от раза разные результаты. Вас это устраивает?
в моем случае да
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Никита Карпеев
в моем случае да
Понятно. В любом случае, мне кажется, что никакие индексы Вам тут существенно не помогут, и запрос придётся переписать.
источник

НК

Никита Карпеев... in pgsql – PostgreSQL
Victor Yegorov
на eidb.lot.torg_id индекс есть?
создал индекс, скорость существенно увеличилась, спасибо
источник

НК

Никита Карпеев... in pgsql – PostgreSQL
Yaroslav Schekin
Понятно. В любом случае, мне кажется, что никакие индексы Вам тут существенно не помогут, и запрос придётся переписать.
а как можно было бы переписать? с саб запросом? можно просто наводку
источник