首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >String JSON文档在Aurora Postgress vs Aurora Mysql中

String JSON文档在Aurora Postgress vs Aurora Mysql中
EN

Stack Overflow用户
提问于 2021-03-19 15:35:24
回答 1查看 1.1K关注 0票数 1

我需要将JSON文件存储到RDS中。

我们已经在我的SQL中尝试过了,但是基于JSON字段的筛选或从Mysql显示JSON字段都不起作用。

在迁移到NOSQL之前,这对我们来说是非常昂贵的,我们想检查Postgres是否能够以良好的性能处理这一问题。

例如,假设表中的值低于

代码语言:javascript
复制
id |  name  | age |                     more_info                    
----+--------+-----+---------------------------------------------------
  1 | Thomas |  22 | {"email": "thom22@gmail.com", "country": "US"}
  2 | Jerry  |  24 | {"email": "jerrybac@gmail.com", "country": "UK"}
  3 | Annie  |  21 | {"email": "anniehan@ymail.com", "country": "AUS"}

如果我们想要查询id,名字,年龄,more_info.country是可能的吗?我们能在这个表中索引more_info吗?

根据专家经验,建议将Postgres用于JSON。我们确实有两个列,它们将是jsonb类型。

该表中记录的数量更多--超过20亿。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-19 15:47:21

您可以以不同的方式查询特定国家,它们需要不同的索引来加快搜索速度(我假设该列被定义为jsonb)。

您可以在整个JSON值上创建GIN索引:

代码语言:javascript
复制
create index on the_table using gin(more_info jsonb_path_ops);

上面的索引可以支持包含操作符@>

因此,以下查询可以使用该索引:

代码语言:javascript
复制
select *
from the_table
where more_info @> '{"country": "AUS"}'

select *
from the_table
where more_info @> '{"email": "thom22@gmail.com"}'

或者,使用操作符类jsonb_ops可以使用支座更多的操作符,但速度要慢一些。

与B树索引相比,GIN索引更大,维护速度更慢。如果您知道要查询的特定键,则该键上的B树索引可能更有效:

代码语言:javascript
复制
create index on the_table using gin( (more_info ->> 'country') );

以下查询可以使用该索引:

代码语言:javascript
复制
select *
from the_table
where more_info ->> 'country' = "AUS";

请注意,此方法要求您要查询的每个键都有一个索引。而GIN索引可以支持任何使用@>的查询。

由于GIN索引是一个支持多种表达式的“多用途”索引,它可能不如专用的B树索引高效和快速。您将需要对您的数据和查询进行实验,以查看哪些性能更好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66711184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档