【发布时间】:2020-07-03 10:58:33
【问题描述】:
我在创建索引时遇到困难。
TableName(My_Table)
ColumnName(Repo_id(INT),Data JSONB)
JSONB 结构:
{
"Property_1":'1',
"Property_2":'2',
"Property_3":'3',
"Property_4":'4',
"Property_5":'5'
}
对于一个查询:
select *
from my_table
where repo_id = 1
and Data ->> 'Property_1' = '1'
我添加了 btree 索引 (repo_id,(Data ->> 'Property_1')),它适用于那种情况。
对于其他场景,如
select *
from my_table
where repo_id = 2
and Data ->> 'Property_2' = '2'
它没有给我最佳计划。为此,我必须将以前的索引修改为覆盖索引 (repo_id,(Data ->> 'Property_1',((Data ->> 'Property_2')) ),这给了我最佳计划。
我在列中有超过 100 个 json 属性,并且对于每个 repo_id,其中的条件 ...json 属性过滤器会有所不同。我认为将所有这些列添加为覆盖索引是不明智的,它会增加索引大小。
请建议我如何有效地在动态 json 属性过滤器上创建索引。
【问题讨论】:
标签: sql postgresql indexing jsonb postgresql-10