Как определить, какой тип индекса использовать в Postgres?
У меня есть база данных Postgres, в которой есть 2 столбца, которые не являются первичными ключами (и не могут быть), но выполняются поиск по большому количеству и сравниваются для равенства с двумя столбцами в других таблицах.
Я считаю, что это идеальный случай для добавления индекса в мои таблицы. Я никогда не использовал индексирование в базе данных до этого, поэтому я пытаюсь изучить правильный способ сделать это.
Я узнал, что есть несколько типов индексирования, которые я могу выбрать. Как определить, какой метод будет наиболее эффективным для моей базы данных? Также был бы правильным методом создать единый индекс, который охватывает оба столбца?
Ответы
Ответ 1
Postgres поддерживает типы B-дерева, R-дерева, Hash, GiST и GIN. Индексирование B-дерева является наиболее распространенным и подходит для большинства распространенных сценариев. Это синтаксис:
CREATE INDEX idex_name ON table_name USING btree(column1, column2);
Вот документация createindex, и здесь больше информации о разных indextypes в postgres.
Какой тип индекса вы должны использовать, зависит от того, какие типы операций вы хотите выполнить. Если вы просто хотите проверить равенство, то хэш-индекс является лучшим. Для большинства распространенных операций (например, сравнение, сопоставление образцов) следует использовать B-дерево. Я лично никогда не использовал индексацию GiST или GIN. ЛЮБОЙ Гуру там?
В документации описываются все эти типы. Они могут помочь вам лучше меня:)
Надеюсь, что это поможет.
Ответ 2
Попытайтесь понять queryplanner, потому что эта часть PostgreSQL должна работать с вашими индексами. EXPLAIN ANALYZE будет необходим для оптимизации ваших запросов.