TGViewer
дата инженеретта дата инженеретта @data_engineerette · 3.43K subscribers
Post #37 1.11K
❄️Ответ на задачу 2❄️

Один из вариантов был таким:

SELECT DISTINCT t1.*
FROM logs t1
JOIN logs t2
ON t1.id > t2.id AND t1.dt < t2.dt;


⚠️Но посмотрим на план запроса (читаем снизу вверх, смотрим на cost):

HashAggregate (cost=92291..92294) 
Group Key: t1.id, t1.dt
-> Nested Loop (cost=0..89454)
Join Filter
-> Seq Scan on logs t1 (cost=0..33)
-> Materialize
-> Seq Scan on logs t2


Здесь очень дорогой Nested Loop Join, который увеличил косты с 33 до 90к.

✅Что ожидалось увидеть?

Используем lag/lead и сравниваем разницу айдишников с предыдущим и последующим:

WITH diffs AS ( 
SELECT
*,
id - LAG(id) OVER(ORDER BY dt) prev_diff,
id - LEAD(id) OVER(ORDER BY dt) next_diff
FROM logs
)
SELECT id, dt
FROM diffs
WHERE prev_diff > 1 or next_diff > 1;


План запроса:

Subquery Scan on diffs (cost=159..249)
Filter
-> WindowAgg
-> Sort
Sort Key: logs.dt
-> Seq Scan on logs


В первом случае примерные косты были 90к, во втором 250 => в 370 раз меньше.

✨Также нам необязательно знать все id поздних записей, достаточно найти границы диапазонов✨
  • 🔥 18
More from @data_engineerette
  1. Oct 2, 2026Lance Недавно ковырялась в инструменте для обслуживания таблиц Apache Amoro и наткнулась н…
  2. Sep 30, 20265 октября начнется 19-й поток программы Data Engineer от Newprolab Программа для junior- и…
  3. Sep 25, 2026Как прошла SmartData 2026? Я вот перечитываю свои впечатления от прошлого года и понимаю,…
  4. Sep 24, 2026Исследование data-people Тут ребята из DevCrowd запустили ежегодное исследование специалис…
  5. Sep 15, 2026Каким должен быть хороший DE? Меня однажды спросили на собесе: 🤩Какие 3 качества важны дл…
  6. Sep 12, 2026Mermaid-диаграммы Наконец-то дошли руки поковыряться в mermaid-диаграммах, это что за имба…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →