嵌套整数字段上的Postgres jsonb索引

时间:2018-03-19 02:10:20

标签: postgresql indexing jsonb

我在postgres数据库中有以下数据结构 - 一个名为customer的jsonb列

{
    "RequestId": "00000000-0000-0000-0000-000000000000",
    "Customer": {
        "Status": "A",
        "AccountId": 14603582,
        "ProfileId": 172,
        "ReferralTypeId": 15
    }
    "Contact": {
        "Telephone": "",
        "Email": ""
    }   
}

我想在ProfileId字段上创建一个索引,这是一个整数。

我一直无法找到如何在嵌套字段上创建索引的示例。

我正在执行的查询(需要约300秒)是:

select id, customer from where customer @> '{"Customer":{"ProfileId": 172}}'

1 个答案:

答案 0 :(得分:1)

GIN索引support the @> operator的运算符类jsonb_path_opsjsonb_ops

因此,您的查询应该能够使用以下索引

create index on the_table using gin (customer);

使用默认的jsonb_ops运算符。

根据手册,jsonb_path_ops运算符速度更快,但仅支持@>运算符。因此,如果这是您拥有的唯一条件类型(对于该列),使用jsonb_path_ops可能会更有效:

create index on the_table using gin (customer jsonb_path_ops);