В каком порядке должны быть поля в составном индексе

«В каком порядке должны быть поля в составном индексе» — вопрос из категории Базы данных, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Порядок полей в составном индексе важен: сначала должны идти поля с высокой селективностью (уникальные или почти уникальные значения), затем менее селективные. Это позволяет оптимизатору эффективно отсекать большие объемы данных на первых этапах поиска.

Пример для таблицы пользователей:

-- Хороший индекс: сначала страна (низкая селективность), затем город (средняя), потом 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.