【发布时间】:2020-12-08 21:03:44
【问题描述】:
我在 postgresql 表中有一个类型为 jsonb 的列。
{
.....
"type": "car",
"vehicleIds": [
"980e3761-935a-4e52-be77-9f9461dec4d1","980e3761-935a-4e52-be77-9f9461dec4d2"
]
.....
}
应用程序对这些字段运行查询以获取记录。我只需要为这些字段索引此列。
如何做到这一点?
这是以属性为列名的查询结构:
SELECT *
FROM Vehicle f
WHERE f.properties::text @@ CONCAT('$.vehicleIds[*] >', :vehicleId )= true
AND f.properties::text @@ CONCAT('$.type >', :type ) = true
【问题讨论】:
-
您的查询看起来如何?一般来说,您可以只在整个列上创建一个 gin 索引。如果您使用正确的运算符,则索引可用。
-
已添加查询的已编辑问题。
-
嗯,您不能将
@@运算符与text值一起使用。为什么要将jsonb转换为text? -
此查询位于我正在处理的遗留项目中,遗憾的是对此并没有太多了解。在负载测试期间,我们发现此查询存在问题,因此正在探索是否可以为此列创建索引。
-
该查询甚至不应该运行。
标签: postgresql indexing