Postgresql

我們可以為 JSONB 數據類型的鍵/值創建索引嗎?

  • February 7, 2022

我們可以為 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。這裡有一個陷阱:類型轉換的簡短表示法需要一組額外的括號來使語法適用於創建索引:

CREATE INDEX y_data_xid_idx ON y (((y.data->>'x_id')::bigint));

或者,使用顯式形式(達到相同效果):

CREATE INDEX y_data_xid_idx ON y (cast(y.data->>'x_id' AS bigint));

引用自:https://dba.stackexchange.com/questions/117139