【问题标题】:What is the best type of index to use on a materialized view in PostgreSQL在 PostgreSQL 的物化视图上使用的最佳索引类型是什么
【发布时间】:2020-03-06 09:01:16
【问题描述】:

我想提高对我需要使用的 Postgrsql 数据库中表的查询性能。

CREATE TABLE mytable (
    article_number text NOT NULL,
    description text NOT null,
    feature text NOT null,
    ...
);

该表只是示例,但问题是没有唯一的列。 article_number 是在 where 子句中使用的,但例如 article_number='000.002-00A' 可以有 3 到 300 行。总行数为 102,165,920。在这种情况下使用的最佳索引是什么?

我知道 postgres 中有 B-tree、Hash、GiST、SP-GiST、GIN 和 BRIN 索引类型,但哪一种最适合。

【问题讨论】:

    标签: postgresql postgresql-9.5


    【解决方案1】:

    如果在article_number 上过滤查找,则应在其上创建索引。不太清楚你还问什么。

    默认索引是 btree,它可以正常工作。如果您只检查严格相等,hash 也是一种选择,但它在 Postgres 10 之前存在问题,所以我不推荐它。

    其他索引类型用于更复杂的查询形式或自定义数据类型,如果您只想执行相等过滤器,甚至没有理由考虑它们。

    • btree 可用于严格相等和范围搜索(包括前缀搜索,例如 foo like 'bar%'
    • 哈希索引仅对严格相等有用,在极少数情况下,它们比 btree 更快且更小
    • 当每行有多个索引值(数组、json、gis、某些 FTS 案例)时,GIN 索引很有用
    • GiST 索引对于比相等和范围(geom/gis、FTS)更复杂的查询很有用

    我从未研究过 BRIN 索引,所以我不确定它们的用例是什么。但我的理解是,在您拥有大量行之前,甚至没有理由考虑它。

    基本上,除非你知道你不能使用btree。

    【讨论】:

    • 我在问应该是什么样的索引。 btree、GiST、GIN 或任何其他
    • 我编辑了我的答案以匹配。 btree 是您应该使用的。在 pg > 10 中,散列 可能 也是一种选择,但需要进行基准测试才能确定。
    猜你喜欢
    • 2019-01-27
    • 1970-01-01
    • 2017-03-15
    • 2021-05-20
    • 2012-07-14
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    相关资源
    最近更新 更多