Как определить, какой тип индекса использовать в Postgres? - PullRequest
26 голосов
/ 01 декабря 2010

У меня есть база данных Postgres, в которой есть 2 столбца, которые не являются первичными ключами (но не могут быть), но в них выполняется многократный поиск и сравнение на равенство с 2 столбцами в других таблицах.

Я считаю, что это идеальный случай для добавления индекса в мои таблицы. Я никогда раньше не использовал индексирование для базы данных, поэтому я пытаюсь научиться правильно делать это.

Я узнал, что есть несколько типов индексации, из которых я могу выбирать. Как определить, какой метод будет наиболее эффективным для моей базы данных? Также правильным методом будет создание единого индекса, который охватывает оба столбца?

Ответы [ 2 ]

22 голосов
/ 01 декабря 2010

Postgres поддерживают типы индексации B-tree, R-tree, Hash, GiST и GIN.Индексирование по B-дереву является наиболее распространенным и соответствует наиболее распространенным сценариям.Это синтаксис:

CREATE INDEX idex_name ON table_name USING btree(column1, column2);

Вот документация createindex , а также дополнительная информация о различных индексных типах в postgres.

Какой типИндекс, который вы должны использовать, зависит от того, какие типы операций вы хотите выполнить.Если вы просто хотите проверить равенство, тогда лучше использовать хэш-индекс.Для наиболее распространенных операций (например, сравнения, сопоставления с образцом) следует использовать B-дерево.Лично я никогда не использовал индексацию GiST или GIN.Есть ли Гуру?

В документации описаны все эти типы.Они могут помочь вам лучше меня:)

Надеюсь, это поможет.

3 голосов
/ 01 декабря 2010

Попытайтесь также понять queryplanner , потому что эта часть PostgreSQL должна работать с вашими индексами.EXPLAIN ANALYZE поможет вам оптимизировать ваши запросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...