【问题标题】:Index JSON Array in Postgres DB在 Postgres DB 中索引 JSON 数组
【发布时间】:2016-03-16 13:57:32
【问题描述】:

我有一个表,其中每一行都有一个 JSON 结构,如下所示,我试图在 postgresql 数据库中建立索引,并且想知道最好的方法是什么:

{
    "name" : "Mr. Jones",
    "wish_list": [
        {"present_name": "Counting Crows",
        "present_link": "www.amazon.com"},
        { "present_name": "Justin Bieber",
        "present_link": "www.amazon.com"},
    ]
}

我想在 wish_list 数组中的每个 present_name 上放置一个索引。这里的目标是,我希望能够通过索引找到人们想要特定礼物的每一行。

我一直在阅读如何create an index on a JSON,这是有道理的。我遇到的问题是在 JSON 对象中的数组的每个元素上创建索引。

我的最佳猜测是使用类似 json_array_elements 的函数并为通过该函数返回的每个项目创建一个索引。

感谢您朝着正确的方向前进!

【问题讨论】:

    标签: performance postgresql indexing jsonb


    【解决方案1】:

    请查看 Postgres 文档中的 JSONB Indexing 部分。 对于您的案例索引配置可能如下:

    CREATE INDEX idx_gin_wishlist ON your_table USING gin ((jsonb_column -> 'wish_list'));
    

    它将在wish_list 中存储每个键和值的副本,但是您应该小心命中索引的查询。您应该使用@> 运算符:

    SELECT jsonb_column->'wish_list'
    FROM your_table WHERE jsonb_column->'wish_list' @> '[{"present_link": "www.amazon.com", "present_name": "Counting Crows"}]'; 
    

    强烈建议检查现有答案:

    【讨论】:

    • 如果当前链接可以是任何东西并且值不是预先知道的,即只知道 present_name 查询应该是什么样子?
    • @NischalKumar 你找到答案了吗?
    • @Ulvi SELECT jsonb_column->'wish_list' FROM your_table WHERE wish_list @> '[{"present_name":"Counting Crows"}]' 。在这里,我们可以将 wish_list 声明为 jsonb 列类型。我没有考虑为这种情况建立索引。请分享您的想法,我们如何为相同的用例建立索引。
    猜你喜欢
    • 2021-09-22
    • 2019-03-21
    • 2020-05-30
    • 2021-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-10
    • 1970-01-01
    相关资源
    最近更新 更多