Какие индексы применял на практике?

«Какие индексы применял на практике?» — вопрос из категории SQL и базы данных, который задают на 33% собеседований Data Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В основном работал с PostgreSQL. Чаще всего создавал B-tree индексы для колонок, часто используемых в условиях WHERE, JOIN и ORDER BY, например, для полей user_id или created_at.

-- Индекс для ускорения фильтрации
CREATE INDEX idx_orders_user_id ON orders(user_id);

-- Составной индекс с учётом порядка колонок (сначала более селективная)
CREATE INDEX idx_logs_created_at_user_id ON logs(created_at DESC, user_id);

Для полнотекстового поиска использовал GIN-индексы на поля типа tsvector.

CREATE INDEX idx_articles_content_gin ON articles USING gin(to_tsvector('russian', content));

Для работы с геоданными (например, поиск точек в радиусе) применял GiST-индексы.

CREATE INDEX idx_places_location_gist ON places USING gist(location);

При создании индексов всегда оценивал их влияние на производительность записи (INSERT/UPDATE/DELETE) и следил за их фактическим использованием через системное представление pg_stat_all_indexes, чтобы избежать накопления неиспользуемых индексов.