Postgres jsonb index on nested integer field

感情迁移 提交于 2019-12-11 11:50:28

问题


I've got the following data structure in my postgres database - a jsonb column called customer

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

I want to create an index on the ProfileId field, which is an integer.

I've been unable to find an example of how to create an index on a nested field.

The query I'm executing (which takes ~300s) is:

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

回答1:


The operator classes jsonb_path_ops and jsonb_ops for GIN indexes support the @> operator.

So your query should be able to use the following index

create index on the_table using gin (customer);

which uses the default jsonb_ops operator.

According to the manual the jsonb_path_ops operator is faster but only supports the @> operator. So if that is the only type of condition you have (for that column), using jsonb_path_ops might be more efficient:

create index on the_table using gin (customer jsonb_path_ops);


来源:https://stackoverflow.com/questions/49354856/postgres-jsonb-index-on-nested-integer-field

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!