Я запускаю Postgres 9.5 и играю с индексами BRIN. У меня есть таблица фактов с примерно 150 миллионами строк, и я пытаюсь заставить PG использовать индекс BRIN. Мой запрос:Postgres, выбрав BTREE вместо индекса BRIN
select sum(transaction_amt),
sum (total_amt)
from fact_transaction
where transaction_date_key between 20170101 and 20170201
Я создал как индекс ВТКЕЯ и индекс Брин (по умолчанию значения pages_per_range 128) на колонок transaction_date_key (выше запрос со ссылкой на январь-февраль 2017 г.). Я бы подумал, что PG предпочтет использовать индекс BRIN, однако он идет с индексом BTREE. Вот план объяснить:
https://explain.depesz.com/s/uPI
Затем я удалил индекс ВТКЕЯ, сделал вакуум/анализ на столе, и снова запускал запрос и сделали выбрать индекс Брин однако пробег время значительно продолжительнее:
https://explain.depesz.com/s/5VXi
на самом деле мои тесты были быстрее при использовании индекса ВТКЕЯ, а не индекс Брин. Я думал, что это должно быть наоборот?
Я бы предпочел использовать индекс BRIN из-за его меньшего размера, однако я не могу заставить PG использовать его.
Примечание. Я загрузил данные, начиная с января 2017 года по июнь 2017 года (определяется с помощью transaction_date_key), когда я читал, что упорядочение физических таблиц имеет значение при использовании индексов BRIN.
Кто-нибудь знает, почему PG предпочитает использовать индекс BTREE и почему BRIN настолько медленнее в моем случае?
Можете ли вы показать нам выход 'объяснить (анализирующих, многословным, буферы, сроки)' вместо «просто» 'объяснить (анализировать)' –
Конечно - запуская их в настоящее время. – Ryan
B-Tree и BRIN: https://explain.depesz.com/s/S3Zp BRIN только: https://explain.depesz.com/s/Z1A5 – Ryan