Какой тип индекса лучше всего использовать в материализованном представлении в PostgreSQL - PullRequest
0 голосов
/ 06 марта 2020

Я хочу повысить производительность запросов к таблице в Postgr sql db, которые мне нужно использовать.

CREATE TABLE mytable (
    article_number text NOT NULL,
    description text NOT null,
    feature text NOT null,
    ...
);

Таблица только в качестве примера, но дело в том, что нет уникальных столбцов. article_number используется в предложении where, но, например, article_number='000.002-00A' может содержать от 3 до 300 строк. Общее количество строк составляет 102 165 920. Какой индекс лучше всего использовать в такой ситуации?

Я знаю, что в postgres есть типы индексов B-tree, Ha sh, GiST, SP-GiST, GIN и BRIN, но какой из них лучше для этого.

1 Ответ

1 голос
/ 06 марта 2020

Если поиск фильтруется по article_number, то для него должен быть создан индекс. Не совсем уверен, что еще вы спрашиваете.

Индекс по умолчанию - btree, и он будет работать нормально. Если вы проверяете только на строгое равенство, hash также может быть вариантом, но у него есть проблемы до Postgres 10, поэтому я бы не рекомендовал его.

Другие типы индексов предназначены для более сложных форм Запросы или пользовательские типы данных, нет причин даже рассматривать их, если вы просто хотите выполнить фильтры равенства.

  • btrees полезны для строгого равенства и поиска по диапазону (который включает поиск по префиксу, например, foo like 'bar%')
  • ha sh индексы полезны только для строгого равенства, они могут быть быстрее и меньше, чем btrees в некоторых редких случаях
  • Индексы GIN полезны, когда у вас есть несколько значений индекса на строку (массивы, json, gis, некоторые случаи FTS)
  • Индексы GiST полезны для более сложных запросов, чем равенство и диапазон (geom / gis, FTS)

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

В основном, используйте btree, если вы не знаете , что вы не можете.

...