Postgres: Имеет ли значение порядок столбцов BRIN с несколькими столбцами? - PullRequest
2 голосов
/ 14 января 2020

У меня есть большой объем данных (500+ мил строк) в таблице, которые мне нужно отфильтровать / запросить в режиме реального времени. Я не смог получить удовлетворительную производительность или предсказуемые планы запросов, используя обычные индексы b-дерева. Я думал, что использование BRIN очень помогло бы, но поскольку наши данные не могут быть вставлены в какой-либо контролируемый физический порядок, по которому мне нужно запросить, я настроил MATERIALIZED VIEW, чтобы выбрать данные (включая объединенные данные) и отсортировать их в указанном порядке c. Что-то вроде ...

CREATE MATERIALIZED VIEW my_view AS
    SELECT a.one, b.two, b.three, c.four, c.five, c.six
    FROM a, b, c WHERE ...joins
    ORDER BY b.three, b.two, a.one, c.four;

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

CREATE INDEX my_view_idx ON my_view
    USING BRIN (three, two, one, four) WITH (pages_per_range = 64);

Я упорядочил столбцы (как в таблице , так и в BRIN) на основе селективности, то есть b.three отфильтрует 80% записи (ie. будет соответствовать только 20% записей), b.two отфильтрует 70% и т. д. c.

Упорядочивал столбцы BRIN так же, как физическая сортировка таблицы? Я не могу найти ресурсы, которые описывают это. ближайшая вещь, которую я мог найти, была из: https://www.postgresql.org/docs/10/indexes-multicolumn.html ...

Многоколонный индекс BRIN может использоваться с условиями запроса, которые включают любое подмножество столбцов индекса. Подобно GIN и в отличие от B-дерева или GiST, эффективность поиска по индексу одинакова независимо от того, какие столбцы индекса используются условиями запроса.

... но это не описывает столбец заказ , только включение в запрос .

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

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