Вопрос проверяет понимание того, как базы данных ускоряют поиск и за счет чего работают индексы.
Индексы позволяют находить строки без полного сканирования таблицы, что ускоряет чтение. База данных использует структуру индекса для быстрого поиска по ключу или диапазону. Однако индекс полезен не во всех запросах, например при низкой селективности. Иногда полный скан может быть быстрее.
Индекс — это дополнительная структура данных, которая хранит ключи и ссылки на строки таблицы, позволяя быстрее находить нужные записи.
Определение:
Индекс — это структура, оптимизированная для поиска, обычно реализованная как B-tree или его варианты.
Без индекса:
База данных выполняет full table scan.
Каждая строка проверяется на соответствие условию.
С индексом:
Используется index scan.
Находится диапазон ключей.
Переход к нужным строкам.
Пример запроса:
SELECT * FROM users WHERE id = 100;
Если id индексирован, поиск выполняется значительно быстрее.
Причины:
Структура дерева позволяет искать за логарифмическое время.
Читается меньше страниц диска.
Снижается нагрузка на CPU.
Индекс может не использоваться, если:
Условие затрагивает большую часть таблицы.
Используется функция над колонкой.
Низкая селективность (например, поле boolean).
В таких случаях оптимизатор может выбрать full scan.
Индексы также:
Помогают ускорять JOIN.
Ускоряют ORDER BY и GROUP BY при подходящем индексе.
Индексы ускоряют чтение за счет уменьшения объема данных, которые нужно просканировать, но их эффективность зависит от селективности и структуры запроса.