【问题标题】:Does PostgreSQL quickly search for columns with arrays of strings?PostgreSQL 是否快速搜索带有字符串数组的列?
【发布时间】:2015-08-28 23:05:45
【问题描述】:

根据Can PostgreSQL index array columns?,PostgreSQL可以索引数组列。

它能否像搜索非数组类型一样高效地搜索数组列?

例如,假设您在问题表中有一行(如 SO):

title: ...
content:...
tags: [ 'postgresql', 'indexing', 'arrays' ]

并且您想查找带有标签'postgresql' 的问题。将关系存储在连接表中是否会更快地进行搜索?

是的,每一列都有一个索引。

【问题讨论】:

标签: arrays database performance postgresql indexing


【解决方案1】:

GIN 和 GiST 索引通常比简单的 b-tree 更大,并且需要更长的时间来扫描。 GIN 比 GiST 更快,但代价是非常昂贵的更新。

如果您将标签存储在数组列中,则对行的任何更新通常都需要更新数组上的索引。在某些情况下,HOT 将允许跳过它,但这不是您可以依赖的。所以你会有更多的索引更新和更多的索引膨胀。

另一方面,您无需扫描 b 树以查找所需对象的 ID,然后通过连接从主表中获取它们。您还可以通过使用数组而不是为连接表中的每个标记支付每行 28 字节的开销来节省相当多的空间。

如果您在主表上的插入和更新率相当低 - 包括对标签的更改 - 那么 GIN 可能是一个合适的选择。否则,我可能会在连接表上使用典型的 b 树,在 (tag, object_id) 上有一个二级索引,以便可以使用仅索引扫描来查找具有给定标签的对象。

最后,最好的办法是对它进行基准测试以模拟您的工作负载

【讨论】:

    猜你喜欢
    • 2013-01-20
    • 2013-01-06
    • 2014-11-24
    • 2012-01-22
    • 2022-11-24
    • 2011-03-19
    • 2011-03-01
    • 2023-03-22
    • 1970-01-01
    相关资源
    最近更新 更多