> Как строить индексы в PostgreSQL (Node.js, PostgreSQL, JavaScript)

Уровень: senior · Роль: backend · Категория: Технические вопросы

Компании: ЭНИРАН

Стек: Node.js, PostgreSQL, JavaScript

> Пример ответа

Индексы в PostgreSQL - это структуры данных, которые ускоряют поиск и сортировку записей в таблицах. Как фронтенд-разработчик, ты чаще всего взаимодействуешь с ними через миграции или SQL-запросы в Node.js.Основные типы индексов:

  • B-tree (по умолчанию) - для точного сравнения, диапазонов и сортировки. Создаётся так:
    CREATE INDEX idx_users_email ON users (email);
  • Hash - для точного равенства, но редко используется из-за ограничений.
  • GIN - для массивов, JSONB и полнотекстового поиска. Например:
    CREATE INDEX idx_products_tags ON products USING GIN (tags);
  • GiST - для геоданных и полнотекстового поиска.

Практические советы для фронтендера:

  1. Индексы для внешних ключей - если в таблице orders есть user_id, ссылающийся на users, создай индекс:
    CREATE INDEX idx_orders_user_id ON orders (user_id);
    Это ускорит JOIN-запросы при загрузке данных для UI.
  2. Составные индексы - для фильтрации по нескольким полям, например, дата + статус:
    CREATE INDEX idx_orders_date_status ON orders (created_at, status);
    Порядок полей важен: сначала те, что используются в WHERE с равенством, потом - с диапазоном.
  3. Частичные индексы - если фильтруешь только по активным записям:
    CREATE INDEX idx_active_users ON users (email) WHERE is_active = true;
    Экономит место и ускоряет запросы.
  4. Индексы на JSONB - для полей типа data->>'name':
    CREATE INDEX idx_users_name ON users USING GIN (data jsonb_path_ops);

В Node.js с библиотекой pg или ORM (например, Sequelize, TypeORM) индексы обычно задаются в миграциях. Пример с pg:

JAVASCRIPT
await client.query('CREATE INDEX IF NOT EXISTS idx_users_email ON users (email)');

Избегай избыточных индексов - каждый замедляет INSERT/UPDATE. Используй EXPLAIN ANALYZE в psql или pgAdmin, чтобы проверить, используется ли индекс в твоих запросах.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью