栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JSON上的PostgreSQL索引

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JSON上的PostgreSQL索引

您的另外两个索引不能仅仅因为

->>
运算符 return
text

而工作,而显然您要
jsonb
记住gin运算符类。请注意,您仅提及
json
,但实际上您需要
jsonb

高级索引功能。

为了制定出最佳的索引策略,您必须更仔细地定义要覆盖的查询。您只对奶牛感兴趣吗?还是所有动物/所有标签?哪些运营商是可能的?您的JSON文档是否还包含非动物密钥?这些怎么办?您是否要在索引中包括母牛(或其他人)根本不在JSON文档中显示的行?

假设:

  • 我们只对第一层筑巢的母牛感兴趣。
  • 该值始终是有效的
    integer
  • 我们对没有母牛的行不感兴趣。

我建议使用功能性btree索引,就像您已经拥有的一样,但是将值转换为整数。我不认为您希望对比较进行评估

text
(其中“ 2”大于“ 1111”)。

CREATE INDEX animal_index ON farm (((animal ->> 'cow')::int));  -- !

强制转换需要额外的括号集,以使索引表达式的语法明确。

在查询中使用相同的表达式,以使Postgres意识到索引适用:

SELECt * FROM farm WHERe (animal ->> 'cow')::int > 3;

对于 已知的,静态的,琐碎 的动物数量(如您所评论的),我建议使用部分索引,例如:

CREATE INDEX animal_index ON farm (((animal ->> 'cow')::int))WHERe (animal ->> 'cow') IS NOT NULL;CREATE INDEX animal_index ON farm (((animal ->> 'chicken')::int))WHERe (animal ->> 'chicken') IS NOT NULL;

等等。

您可能必须将索引条件添加到查询中:

SELECt * FROM farmWHERe (animal ->> 'cow')::int > 3AND   (animal ->> 'cow') IS NOT NULL;

可能看起来很多余,但可能是必要的。测试

ANALYZE



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/609187.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号