暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PostgreSQL JSONB索引

原创 梧桐 2023-08-19
2138

PostgreSQL提供了JSON数组数据类型,允许我们快速有效地存储和查询JSON数据。JSON数组类似于其他编程语言中的常规数组,但它是为了与PostgreSQL数据库引擎一起使用而开发的。

像其他PostgreSQL数据类型一样,我们可以索引JSONB数据类型,以提高性能,并通过提供更快的搜索,过滤,排序等来改进涉及JSON数据的查询。

创建JSON表

下面的查询演示了如何创建一个包含JSONB列的表并添加JSON数组数据:

CREATE TABLE products ( id SERIAL PRIMARY KEY, name TEXT NOT NULL, price NUMERIC NOT NULL, details JSONB );

这将创建一个包含id和data列的新表。数据列具有JSONB数据类型,允许我们将JSON数据存储在表中。

然后,我们可以将示例数据插入表中,如下所示:

INSERT INTO products (name, price, details) VALUES ('Product 1', 49.99, '{"color": "red", "size": "medium"}'), ('Product 2', 79.99, '{"color": "red", "size": "large"}'), ('Product 3', 29.99, '{"color": "green", "size": "small"}');

结果表如下:

SELECT * FROM products;

创建JSONB索引

PostgreSQL使用CREATE INDEX语句和USING GIN子句来创建JSONB索引。语法如下所示:

CREATE INDEX index_name ON table_name USING GIN(column_name);

将index_name替换为所需的索引名称,将table_name替换为目标表,将column_name替换为希望索引的JSONB列的名称。

举例来说:

CREATE INDEX idx_details ON products USING GIN (details);

使用数据列应在json_table索引上创建JSONB索引。

查询JSONB索引

一旦我们创建了一个JSONB索引,我们就可以告诉PostgreSQL利用它来优化涉及存储在该表中的JSON数据的查询。

以下示例显示如何使用JSONB索引执行简单的相等搜索

SELECT * FROM products WHERE details->>'color' = 'red';

搜索一个键,我们可以运行查询如下:

SELECT * FROM products WHERE details ? 'color';

要搜索具有特定值的键,我们可以如下运行查询:

SELECT * FROM products WHERE details @> '{"color": "red"}';

要在数组中搜索具有值的键,我们可以运行查询如下:

SELECT * FROM products WHERE details->'color' ? 'red';

这两个操作符的意义是不同的。使用 = 操作符时,它会比较 JSON 字段的整个内容与给定的值是否完全相同。而使用 ? 操作符时,它仅检查 JSON 字段中是否存在特定的键 。

监视JSONB索引使用情况

在某些情况下,我们可能需要监视JSONB索引的使用情况。这可以帮助我们确定索引是否有效地加速了查询。PostgreSQL为我们提供了pg_stat_user_index系统视图,它允许我们获取关于索引使用情况的统计信息。

我们可以如下运行查询:

SELECT * FROM pg_stat_user_indexes WHERE indexrelname = index_name;

范例:

SELECT * FROM pg_stat_user_indexes WHERE indexrelname = 'idx_details';

查询输出返回统计信息,如扫描次数、读取的元组数和为指定索引获取的元组数。

删除JSONB索引

如果我们不再需要JSONB索引,我们可以使用DROP INDEX语句删除它。命令语法如下:

DROP INDEX index_name;

范例:

DROP INDEX idx_details;

结论部分

我们探索了如何在PostgreSQL中使用JSONB索引,这使我们能够加快涉及存储在数据库中的JSON数据的查询。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论