Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Postgres: sql, optimization, index, query

Как оптимизировать SQL-запрос, выбирающий все посты пользователей с >500 подписчиков (с джойнами и проверкой NULL)?

Тестирует навык оптимизации сложных запросов с джойнами и условиями.

Короткий ответ

  1. Добавить индексы на subscribers_count и user_id.

  2. Использовать INNER JOIN вместо LEFT JOIN, если NULL не нужны.

  3. Заменить подзапросы на JOIN.

  4. Применить покрывающий индекс.

Длинный ответ

Исходный проблемный запрос:

SELECT p.* 
FROM posts p
LEFT JOIN users u ON p.user_id = u.id
WHERE u.subscribers_count > 500; -- Медленно без индекса

Оптимизация:

  1. Индексы:

    CREATE INDEX idx_users_subscribers ON users(subscribers_count);
    CREATE INDEX idx_posts_user ON posts(user_id);
  2. Убрать LEFT JOIN (если посты без пользователей не нужны):

    SELECT p.* 
    FROM posts p
    INNER JOIN users u ON p.user_id = u.id -- Быстрее, чем LEFT
    WHERE u.subscribers_count > 500;
  3. Избегать NULL проверок:

    WHERE u.subscribers_count > 500 AND u.subscribers_count IS NOT NULL;
  4. Покрывающий индекс (если запрос выбирает только поля из индекса):

    CREATE INDEX idx_cover ON users(subscribers_count) INCLUDE (id, name);

Результат: Время выполнения снижается с 2 сек до 50 мс.

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    2

  • Сложность:

    7

Навыки

  • Postgres

    Postgres

Ключевые слова

#sql

#optimization

#index

#query

Подпишись на Python Developer в телеграм

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.