Ответ
Для запросов с диапазонами (<, >, <=, >=) однозначно лучше использовать B-tree индекс.
Ключевые различия:
B-tree индекс:
- Хранит данные в отсортированном виде.
- Эффективен для поиска по диапазону, так как база данных может быстро найти начальную точку и последовательно прочитать все нужные значения.
- Подходит для операторов:
=,>,<,>=,<=,BETWEEN,LIKE(с префиксом).
Hash-индекс:
- Хранит хеши от значений столбца. Порядок данных не сохраняется.
- Эффективен только для точных совпадений по равенству (
=). - Не подходит для диапазонных запросов, так как хеши
hash(10)иhash(11)не находятся рядом друг с другом.
Пример:
-- Для этого запроса B-tree индекс будет максимально эффективен
CREATE INDEX idx_users_age ON users(age); -- По умолчанию создается B-tree
SELECT * FROM users WHERE age > 25;