Ответ
Индексы создаются для ускорения поиска, но замедляют запись. Индексирую столбцы, исходя из паттернов запросов в приложении.
Основные кандидаты на индексы:
- Ключевые поля: Первичные ключи (PK) и внешние ключи (FK) индексируются автоматически в большинстве СУБД.
- Поля в условиях
WHERE: Часто используемые для фильтрации.-- Если частый запрос: SELECT * FROM orders WHERE user_id = ? AND status = 'shipped'; CREATE INDEX idx_orders_user_status ON orders(user_id, status); - Поля в
ORDER BYиGROUP BY. - Поля в условиях
JOIN.
Составные (композитные) индексы особенно эффективны. Порядок столбцов в индексе критичен. Использую правило «равенство-диапазон-сортировка» (Equality, Range, Ordering).
Что обычно НЕ индексирую:
- Столбцы с низкой кардинальностью (например,
gender,booleanфлаги), если только они не часть составного индекса. - Часто обновляемые столбцы (каждое обновление требует перестройки индекса).
- Большие текстовые поля (
TEXT,BLOB). Для полнотекстового поиска использую специализированные индексы (GIN в PostgreSQL).
Перед созданием индекса всегда анализирую план запроса с помощью EXPLAIN ANALYZE.