我正在使用Postgres 9.5,并尝试使用BRIN索引。 我有一个大约有1.5亿行的事实表,我正在尝试让PG使用BRIN索引。 我的查询是:
select sum(transaction_amt),
sum (total_amt)
from fact_transaction
where transaction_date_key between 20170101 and 20170201
我在列transaction_date_key上创建了一个BTREE索引和一个BRIN索引(默认的pages_per_range值为128),上面的查询是指2017年1月到2月。我本以为PG会选择使用BRIN索引,但它选择了BTREE索引。以下是执行计划:
https://explain.depesz.com/s/uPI
然后我删除了BTREE索引,对表进行了vacuum / analyze操作,并重新运行了查询,它确实选择了BRIN索引,但运行时间明显更长:
https://explain.depesz.com/s/5VXi
事实上,当使用BTREE索引而不是BRIN索引时,我的所有测试都更快。我认为这应该是相反的吗?
我更喜欢使用BRIN索引,因为它的大小更小,但我似乎无法让PG使用它。
注意:我加载了数据,从2017年1月到2017年6月(通过transaction_date_key定义),因为我读到物理表排序在使用BRIN索引时很重要。
有人知道为什么PG选择使用BTREE索引,以及为什么在我的情况下BRIN索引如此缓慢吗?
explain (analyze, verbose, buffers, timing)
的输出结果,而不仅仅是explain (analyze)
吗? - user330315