В чем разница между хеш-индексом и индексом B-Tree в PostgreSQL
Python
Senior
Рамблер
В чем разница между хеш-индексом и индексом B-Tree в PostgreSQL
Ответы
Основное отличие в структуре и применении:
- **B-Tree** - сбалансированное дерево, оптимально для диапазонных запросов (`BETWEEN`, `>`, `<`, `LIKE 'prefix%'`). Поддерживает сортировку и работает с любыми типами данных.
- **Hash** - хранит хеш-значения ключей, быстрее для точных совпадений (`=`), но не поддерживает диапазонные запросы. Требует перестройки при изменении размера таблицы.
Пример создания:
```
-- B-Tree (по умолчанию)
CREATE INDEX idx_btree ON users (email);
-- Hash индекс
CREATE INDEX idx_hash ON users USING HASH (email);
```
Нюансы:
- Hash занимает меньше памяти, но только для `=` операций
- B-Tree надежнее, поддерживает уникальность, NULL-значения
- В современных версиях PostgreSQL (10+) разница в производительности для `=` минимальна