Базы Данных (Data Base) | SQL & NoSQL. PostgreSQL, MySQL и Big Data. Уроки для Backend и Data Engineer. Архитектура БД, Оптимизация и Design.
IT и технологии · 20 апреля 2026 г.
Как индекс может замедлить запрос? — 20 апреля 2026 г. в 08:20:00.927
Как индекс может замедлить запрос? Сейчас разберём интересный парадокс: почему индекс может замедлить выполнение запроса? 🤔 Обычно индекс ускоряет поиск данных, но есть ситуации, когда его использование ведёт к ухудшению производительности. Давайте рассмотрим несколько таких случаев. 🚀 1. Неправильный выбор индекса Допустим, у нас есть индекс по created_at, а мы выполняем запрос: SELECT * FROM orders WHERE YEAR(created_at) = 2024; Проблема в том, что функция YEAR(created_at) делает так, что индекс не используется эффективно. База данных должна пройтись по всем строкам, применяя функцию ко всем значениям. Лучше переписать так: SELECT * FROM orders WHERE created_at >= '2024-01-01' AND created_at < '2025-01-01'; Теперь индекс сможет работать оптимально. 🔥 🏗 2. Слишком широкий индекс (Over-indexing) Если у нас слишком много индексов на таблице, это приведёт к замедлению операций INSERT, UPDATE, DELETE. Почему? Потому что каждый раз при изменении данных БД должна обновлять все индексы. Поэтому добавляйте индексы осознанно! 📦 3. Низкая селективность индекса Допустим, у нас есть индекс по status, но всего три возможных значения ('new', 'processing', 'done'). Если в таблице миллионы строк, но мало уникальных значений, индекс бесполезен — оптимизатор может решить, что проще выполнить полный скан таблицы. ⚠️ 4. Ошибка с покрывающим индексом Иногда индекс покрывает все нужные колонки (INDEX(col1, col2, col3)), но запрос выбирает ещё одну (col4). Тогда база вынуждена обращаться к самой таблице, что убивает эффективность индекса. 📌 Вывод: индекс — мощный инструмент, но его неправильное использование может навредить. Перед добавлением индексов всегда анализируйте планы выполнения запросов (EXPLAIN в MySQL, EXPLAIN ANALYZE в PostgreSQL). #db 👉 @database_info

