Хэш-индекс в PostgreSQL: что это, его преимущества и недостатки?

Ответ

Хэш-индекс в 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';