Sobes.tech
Назад к вопросам
Senior
9

Какие индексы используешь в реляционных БД (PostgreSQL)? Чем отличается B-Tree от Hash индекса?

Компании, где спрашивали
01.tech

Ответ от нейросети

sobes.tech AI

В PostgreSQL чаще всего используются следующие типы индексов:

  • B-Tree — стандартный индекс, подходит для большинства операций сравнения (>, <, =, BETWEEN, LIKE с префиксом).
  • Hash — индекс для быстрого поиска по точному совпадению (оператор =).
  • GIN и GiST — для полнотекстового поиска, работы с массивами, геоданными.
  • BRIN — для очень больших таблиц с упорядоченными данными.

Отличия B-Tree и Hash индексов:

  • B-Tree индекс хранит данные в сбалансированном дереве, что позволяет эффективно выполнять диапазонные запросы и сортировку. Он поддерживает операции сравнения, поэтому подходит для широкого спектра запросов.

  • Hash индекс оптимизирован только для точного поиска по равенству (оператор =). Он быстрее B-Tree для таких запросов, но не поддерживает диапазонные операции и сортировку.

  • В PostgreSQL Hash индексы исторически были менее надежны (могли повреждаться), но в новых версиях это исправлено.

  • B-Tree индексы более универсальны и чаще используются в продакшене.

Пример создания B-Tree и Hash индекса:

CREATE INDEX idx_btree ON table_name USING btree(column_name);
CREATE INDEX idx_hash ON table_name USING hash(column_name);