Postgres DB中的索引JSON数组

时间:2015-12-10 19:33:08

标签: performance postgresql indexing jsonb

我有一个表,其中每一行都有一个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函数之类的东西,并为通过它返回的每个项目创建一个索引。

感谢你推动正确的方向!

1 个答案:

答案 0 :(得分:2)

请查看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"}]'; 

强烈建议检查现有的nswers: