如何优化具有多个JSONB包含条件的SQL查询?

问题描述 投票:0回答:1

我正在开发一个 PostgreSQL 数据库,我需要根据 JSONB 列中的多个条件过滤行。列属性存储这样的数据

{
"color": "red",
"size": "large",
"shape": "circle"
}

我想找到行, 颜色是“红色”,尺寸是“大”

目前我使用像这样的@>运算符

SELECT *
FROM products
WHERE attributes @> '{"color": "red"}'
  AND attributes @> '{"size": "large"}';

这可行,但我怀疑这不是最有效的方法,因为我稍后会添加更多条件。 创建 GIN 索引是否有助于提高性能?如果是,我应该如何创建它?

postgresql performance indexing jsonb
1个回答
0
投票

默认值和

jsonb_path_ops
都支持包含
@>
运算符。创建索引,
vacuum analyze
表:

create index on products using gin(attributes);
vacuum analyze products;

然后使用

explain analyze verbose
运行一些测试,甚至使用 pgbench 进行适当的基准测试。

您将获得多少提升取决于多种因素,例如表大小、值大小和复杂性、查询的其他部分等。

使用 jsonpath 表达式,您可以将所有这些条件压缩到单个

@?
操作

© www.soinside.com 2019 - 2024. All rights reserved.