Работали ли вы с индексами в базах данных на предыдущих проектах?

«Работали ли вы с индексами в базах данных на предыдущих проектах?» — вопрос из категории Базы данных, который задают на 25% собеседований C/C++ Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, активно использовал индексы для оптимизации запросов в реляционных базах данных, таких как PostgreSQL и SQLite, в рамках C++ проектов. Основной опыт связан с B-деревьями для ускорения поиска по диапазонам и уникальным полям.

Например, при работе с большими таблицами логов использовал составные индексы для запросов с фильтрацией по дате и идентификатору пользователя:

CREATE INDEX idx_logs_user_date ON logs(user_id, created_at DESC);

Ключевые моменты из практики:

  • Выборка vs. Модификация: Индексы значительно ускоряют SELECT и JOIN, но добавляют накладные расходы на INSERT, UPDATE и DELETE, так как индексные структуры также требуют обновления.
  • Анализ плана запроса: Перед созданием индекса всегда анализировал план выполнения через EXPLAIN ANALYZE, чтобы убедиться, что он будет использован оптимизатором.
  • Избыточность: Избегал создания индексов по полям с низкой селективностью (например, status с 2-3 значениями), так как они часто не дают выгоды, но потребляют память.
  • Работа из C++: При использовании библиотек вроде libpqxx для PostgreSQL или нативного API SQLite важно было правильно формировать параметризованные запросы, чтобы планировщик БД мог эффективно использовать существующие индексы.