Индексы кардинально ускоряют SELECT-запросы, особенно те, которые включают:
WHEREJOIN между таблицамиORDER BY и группировку GROUP BYБез индекса база данных выполняет полное сканирование таблицы, читая каждую строку для поиска совпадающих данных. С индексом она переходит напрямую к нужным строкам, значительно сокращая время выполнения запроса.
Каждый индекс создаёт накладные расходы на запись. Когда данные изменяются, база данных должна обновить не только саму таблицу, но и все связанные индексы. Это влияет на:
INSERT — необходимо создать новые записи в индексахUPDATE — необходимо изменить существующие записи в индексахDELETE — необходимо удалить записи из индексовЧем больше индексов у таблицы, тем медленнее становятся операции записи.
Индексы потребляют дополнительное место на диске сверх самой таблицы. Таблица с большим количеством индексов может занимать в несколько раз больше места, чем сами данные, что становится серьёзной проблемой при масштабировании.
| Сценарий | Рекомендация |
|---|---|
| Нагрузка с преобладанием чтения | Добавляй индексы свободно |
| Нагрузка с преобладанием записи | Используй индексы умеренно |
| Массовая загрузка данных | Удали индексы перед загрузкой, пересоздай после |
| Столбцы с низкой кардинальностью | Избегай индексирования (например, булевы флаги) |
Основной компромисс — это скорость чтения против скорости записи и занятого места. Индексы следует применять стратегически — ориентируясь на столбцы, которые часто используются в фильтрации и джойнах, и избегая избыточного индексирования таблиц, которые часто изменяются. Регулярный анализ индексов и их обслуживание необходимы для поддержания производительности.
Индексы улучшают производительность чтения, исключая необходимость полного сканирования таблицы и позволяя базе данных перемещаться прямо к релевантным строкам, вместо того чтобы читать каждую строку последовательно.
Новый — ещё не проверен сообществом
Вы