Ответ
Порядок полей в составном индексе важен: сначала должны идти поля с высокой селективностью (уникальные или почти уникальные значения), затем менее селективные. Это позволяет оптимизатору эффективно отсекать большие объемы данных на первых этапах поиска.
Пример для таблицы пользователей:
-- Хороший индекс: сначала страна (низкая селективность), затем город (средняя), потом email (высокая)
CREATE INDEX idx_users_country_city_email ON users(country, city, email);
В Go при использовании ORM (например, GORM):
db.Model(&User{}).AddIndex("idx_users_country_city_email", "country", "city", "email")
Такой порядок позволяет эффективно использовать индекс для запросов с фильтрацией по:
- country
- country + city
- country + city + email
Но не будет эффективен для запросов только по city или email без указания country.