我正在运行 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 列(上面的查询指的是 2017 年 1 月到 2017 年 2 月)上创建了 BTREE 索引和 BRIN 索引(默认pages_per_range值为128)。我本以为 PG 会选择使用 BRIN 索引,但它与 BTREE 索引搭配使用。以下是解释计划:
https://explain.depesz.com/s/uPI
然后我删除了 BTREE 索引,对表进行了真空/分析,然后重新运行查询,结果如下did选择 BRIN 索引,但运行时间要长得多:
https://explain.depesz.com/s/5VXi
事实上,使用 BTREE 索引而不是 BRIN 索引时,我的测试速度更快。我以为这应该是相反的?
我更喜欢使用 BRIN 索引,因为它的尺寸较小,但我似乎无法让 PG 使用它。
注意:我加载了从 2017 年 1 月到 2017 年 6 月的数据(通过 transaction_date_key 定义),因为我读到物理表排序在使用 BRIN 索引时会产生影响。
有谁知道为什么 PG 选择使用 B TREE 索引以及为什么 BRAIN 在我的情况下慢得多?