Стоит ли создавать индекс на каждую колонку таблицы в SQL?

«Стоит ли создавать индекс на каждую колонку таблицы в SQL?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Технически — можно, но практически — почти всегда плохая идея. Индексы — это компромисс между скоростью чтения и скоростью записи.

Плюсы индексов (зачем они нужны):

  • Резко ускоряют поиск (WHERE), соединения (JOIN) и сортировку (ORDER BY).

Минусы индексов (почему не на каждую колонку):

  • Замедляют запись: При каждой INSERT, UPDATE или DELETE необходимо обновлять все затронутые индексы.
  • Занимают место на диске.
  • Оптимизатор может выбрать неоптимальный индекс, если их слишком много.

Рекомендации по созданию индексов:

  1. Индексируйте колонки, часто используемые в условиях WHERE и JOIN.
  2. Отдавайте предпочтение колонкам с высокой селективностью (много уникальных значений).
  3. Избегайте индексов для колонок с низкой селективностью (пол, статус), если они не часто используются в запросах.
  4. Используйте составные индексы для часто запрашиваемых комбинаций колонок.
  5. Анализируйте планы запросов с помощью EXPLAIN, чтобы принимать обоснованные решения.