私はjsonb
フィールドを含むテーブルを持つ9.4 Postgresデータベースを持っています。Postgresを使用したjson配列内のオブジェクト要素のインデックス付け
JSONの構造は次のようになります。
{
name: 'customer1',
age: 28,
products: [{
name: 'product1',
price: 100
}, {
name: 'product2',
price: 200
}]
}
次のクエリでは、うまく前述のJSONを返す:
SELECT jdoc
FROM customers, jsonb_array_elements(jdoc->'products') as products
WHERE (products->>'price')::numeric > 150
問題は、パフォーマンスはかなり苦しんでいるということですより大きなデータベースで。
このクエリを高速化するために使用できるインデックスは何ですか?私がこれまでに試した何
:
GIN
指数(jsonb_ops
とjsonb_path_ops
両方)。彼らは@>
のような存在演算子でしか動作しないようです。CREATE INDEX ON persons(((jsonb_array_elements(jdoc->'products')->>'price')::numeric))
。私は私にデータ型の不一致エラーを与えます。CREATE INDEX ON persons(((jdoc->'age')::numeric))
が機能し、(jdoc->>'age')::numeric < 30
を高速に照会できることに注意してください。
JSONではなくリレーショナルデータモデルを使用します。 – Abelisto