ВЫБЕРИТЕ DISTINCT ПО оптимизации в Postgresql 10 - PullRequest
0 голосов
/ 24 июня 2019

Я хочу выбрать последние уникальные строки в зависимости от времени, поэтому:

 SELECT DISTINCT ON (track) *
 FROM   eco.tracks WHERE id > (SELECT id FROM eco.tracks WHERE time_track < ((SELECT time_track FROM eco.tracks ORDER BY id DESC LIMIT 1)  - INTERVAL '300 seconds')  ORDER BY id DESC LIMIT 1)
 ORDER  BY track, time_track DESC;

Это дает мне 20 секунд, что слишком медленно.Если я заменю идентификатор на реальное значение.он дает мне 2 мс

     SELECT DISTINCT ON (track) *
     FROM   eco.tracks WHERE id > 48000000
     ORDER  BY track, time_track DESC;

Этот запрос

SELECT id FROM eco.tracks WHERE time_track < ((SELECT time_track FROM eco.tracks ORDER BY id DESC LIMIT 1)  - INTERVAL '300 seconds')  ORDER BY id DESC LIMIT 1

дает только 2 мс ..

Что не так?!

...