mars3_default_brin

mars3_default_brin — это ключевая функция движка хранения MARS3. Она обеспечивает поддержку BRIN-индексов по умолчанию на уровне таблицы, позволяя автоматически фильтровать данные во время последовательных сканирований (SeqScan) без необходимости ручного создания индексов.

Использование

Чтобы включить mars3_default_brin, укажите параметр default_brinkeys при создании таблицы:

CREATE TABLE t
(c1 BIGINT, c2 BIGINT, c3 BIGINT)
USING mars3
WITH (mars3options='default_brinkeys=30');

Этот параметр принимает целочисленное значение (по умолчанию — 30):

  • 0: отключает автоматическое создание BRIN-индексов.
  • -1: автоматически создаёт BRIN-индексы по умолчанию для всех столбцов, поддерживающих операторы <, > и =.
  • N: автоматически создаёт BRIN-индексы по умолчанию для первых N столбцов, поддерживающих операторы <, >, и =.

Для проверки, какие столбцы таблицы имеют BRIN-ключи, используйте функцию mars3_brinkeys.

Пример использования

  1. Создайте таблицу t с использованием движка хранения MARS3 и тремя столбцами типа BIGINT: c1, c2 и c3. Установите default_brinkeys=2, чтобы автоматически создать BRIN-индексы для первых двух столбцов.
CREATE TABLE t
    (c1 BIGINT, c2 BIGINT, c3 BIGINT)
    USING mars3
    WITH (mars3options='default_brinkeys=2');
  1. Вставьте данные в таблицу t. Используйте функцию generate_series, чтобы сгенерировать значения от 1 до 1 000 000 и вставить их как строки.
INSERT INTO t SELECT i,i,i FROM generate_series(1,1000000) AS i;
  1. Выполните команду VACUUM для таблицы t. Для таблиц MARS3 это перемещает данные из строкового хранилища в колоночный слой и строит внутренние BRIN-структуры.
VACUUM t;
  1. Выполните запрос на подсчёт количества строк в таблице t, где c1 < 1000.
  • Поскольку default_brinkeys=2, столбец c1 (один из первых двух) автоматически получил BRIN-индекс mars3_default_brin. Запрос использует этот индекс для ускорения выполнения.
SELECT COUNT(*) FROM t WHERE c1 < 1000;
  1. Выполните запрос на подсчёт количества строк в таблице t, где c3 < 1000.
  • Так как default_brinkeys=2, столбец c3 (третий по счёту) не получил автоматический BRIN-индекс. Этот запрос, вероятно, не сможет использовать индекс и будет выполняться медленнее предыдущего.
SELECT COUNT(*) FROM t WHERE c3 < 1000;

Основные отличия

Сравнение с mars3_brin

mars3_brin mars3_default_brin
Создание Требует ручного выполнения CREATE INDEX Создаётся автоматически; ручные действия не нужны
Поддержка сканирования Фильтрует данные только при IndexScan Фильтрует данные как при IndexScan, так и при SeqScan
Версия технологии BRIN v2 BRIN v2
Параметризованные запросы Поддерживает параметризованный IndexScan Поддерживает параметризованный SeqScan