我们可以为 JSONB 数据类型的键/值创建索引吗?
例如,对于这些架构:
CREATE TABLE x (
id BIGSERIAL,
data JSONB
);
CREATE TABLE y (
id BIGSERIAL,
data JSONB
);
慢查询:
SELECT *
FROM x
LEFT JOIN y
ON (y.data->>'x_id')::BIGINT = x.id
如何创建y.data->>'x_id'
可用于此类查询的索引?
我建议在键“x_id”的值上使用表达式索引
bigint
,强制转换为 -plain (默认)B-tree,而不是 GIN。这里有一个陷阱:类型转换的简短表示法需要一组额外的括号来使语法适用于创建索引:或者,使用显式形式(达到相同效果):