Ответ
Для запросов с диапазонами (<
, >
, <=
, >=
) однозначно лучше использовать 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;