Ответ
Хэш-индекс в PostgreSQL — это тип индекса, оптимизированный для операций точного равенства (=
). Он вычисляет хэш от значения в столбце и хранит его, что позволяет очень быстро находить строки по конкретному значению.
Преимущества:
- Скорость: Очень быстрый поиск при запросах с
WHERE column = 'value'
. Часто быстрее, чем B-Tree для таких операций. - Компактность: Обычно занимает меньше места на диске по сравнению с B-Tree индексом.
Недостатки и ограничения:
- Только для равенства: Не поддерживает диапазонные запросы (
>
,<
,BETWEEN
), сортировку (ORDER BY
) или поиск по шаблону (LIKE
). - Не WAL-логировались до PostgreSQL 10: В версиях до 10-й хэш-индексы не записывались в WAL (Write-Ahead Log), что делало их небезопасными при сбоях системы. Начиная с v10, эта проблема решена.
- Не поддерживают уникальность: Нельзя создать
UNIQUE
хэш-индекс.
Когда использовать:
Используйте хэш-индекс, когда вам нужен максимально быстрый поиск по точному совпадению для столбцов с высокой кардинальностью (много уникальных значений), и вам не нужна сортировка или поиск по диапазону. В большинстве других случаев стандартный B-Tree индекс является более универсальным и предпочтительным выбором.
Пример создания:
-- Создание хэш-индекса для столбца email
CREATE INDEX idx_users_email_hash ON users USING HASH (email);
-- Этот запрос будет эффективно использовать индекс
SELECT * FROM users WHERE email = 'user@example.com';