Индексация Postgres?

Я новичок в postgres. У меня есть столбец с именем host (строка varchar2) в таблице, которая имеет около 20 миллионов строк. Как использовать индексирование для оптимизации поиска для поиска конкретного хоста. Кроме того, в этой колонке будет обновляться ежедневно мне нужно написать триггер индексации на определенный интервал? Если да, то как мне это сделать? (Для записей я использую Ruby и Rails 3)

3 ответов


предполагая, что вы делаете точные совпадения, вы должны просто иметь возможность создать индекс и оставить его:

CREATE INDEX host_index ON table_name (host)

оптимизатор запросов должен просто использовать автоматически.

вы можете указать другие параметры, такие как параметры сортировки для использования.

посмотреть документы PostgreSQL для создания индекса для получения дополнительной информации.


Я бы предложил использовать BRIN Index с момента его введения из PostgreSQL 9.5, а не обычного индекса btree.


для текстового поиска рекомендуется использовать типы индексов GIN или GiST.

https://www.postgresql.org/docs/9.5/static/textsearch-indexes.html

другая возможность заключается в том, что если бы вы только выполняли точное соответствие в host столбец, т. е. нет сравнения неравенства (>, <) и частичное соответствие (like, подстановочный знак), вы можете рассмотреть возможность преобразования host к целому хэшу, чтобы ускорить поиск значительно.