Вопрос проверяет понимание устройства индексов и причин, по которым разные типы индексов подходят для разных запросов.
B-Tree индекс хранит данные в отсортированном виде, поэтому поддерживает диапазонные запросы. Hash-индекс использует хэш-функцию и не хранит порядок значений. Из-за этого он подходит только для точного поиска по равенству. Операции больше или меньше требуют упорядоченности, которой у Hash-индекса нет. Поэтому такие запросы он не поддерживает.
Индексы оптимизируют поиск, но делают это разными способами.
B-Tree индекс — индекс, который хранит ключи в отсортированной структуре дерева.
Hash-индекс — индекс, который сопоставляет ключ значению хэш-функции.
B-Tree — универсальный тип индекса.
Особенности:
Ключи упорядочены
Поддерживаются операции:
=
<, >
BETWEEN
ORDER BY
Хорошо работает для диапазонов
Hash-индекс ориентирован на быстрый поиск по равенству.
Особенности:
Использует хэш-функцию
Нет упорядоченности ключей
Поддерживает только =
< и >Операции больше и меньше требуют:
Сравнения значений
Перехода к соседним ключам
Упорядоченного хранения
Hash-индекс:
знает только хэш
не знает, какое значение «больше» или «меньше»
Диапазоны и сортировки → B-Tree
Частые проверки равенства → Hash (редко)
Универсальный выбор → B-Tree
B-Tree — универсальный индекс для большинства запросов. Hash-индексы ограничены поиском по равенству, поэтому используются редко.