Назад к вопросам
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);