Какой тип индекса (B-tree или Hash) лучше подходит для диапазонных запросов (например, `WHERE column > value`)?

Ответ

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