TGViewer
Data Science. SQL hub Data Science. SQL hub @sqlhub · 35.9K subscribers
Post #2510 705
Полезный совет для MySQL 8: используй LATERAL, когда для каждой строки нужно получить «лучшие N связанных записей».
Например, взять последние 3 заказа каждого пользователя:


SELECT
u.id,
u.name,
o.id AS order_id,
o.created_at
FROM users u
JOIN LATERAL (
SELECT id, created_at
FROM orders
WHERE orders.user_id = u.id
ORDER BY created_at DESC
LIMIT 3
) o ON TRUE;


Без LATERAL такую задачу часто решают через оконные функции и сначала ранжируют всю таблицу orders.
С LATERAL база может для каждого пользователя сразу сходить по индексу:


CREATE INDEX idx_orders_user_created
ON orders (user_id, created_at DESC);


Особенно полезно для задач вида:
«последние N», «самая дорогая запись», «ближайшее событие», «лучший результат для каждой строки».
Главное: всегда проверяй EXPLAIN ANALYZE — на больших таблицах правильный составной индекс здесь решает всё.
More from @sqlhub
  1. Sep 30, 2026🗄 ИИ-агент работает с базой, но как не дать ему показать лишнее? 6 октября в Архитектурно…
  2. Sep 29, 2026🖥 Vector-базы не умерли, но для многих задач отдельный сервер уже не нужен. sqlite-vec до…
  3. Sep 28, 2026Post #2507
  4. Sep 28, 2026🔥Полноценный data stack внутри своего контура Когда данных становится много, одного SQL-д…
  5. Sep 28, 2026⚡️ Запустили PostgreSQL в Docker и случайно открыли его всей сети? Команда docker run -p 5…
  6. Sep 27, 2026💀 Claude Code за 103 секунды удалил более 48 тысяч файлов Пользователь Claude Code сообщи…
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 →