不均一な属性を持つ非正規化データの大規模なセットがあり (一部の属性は存在し、一部の属性は存在しません)、それを単一のhstore列に挿入します。この列には、約 300 のキーと値のペアが含まれており、行あたりの合計サイズは 5000 文字です。これらの属性のいくつかに対して、合計 100000 行のilike
and演算子を使用して文字列検索クエリを実行したいと考えています。OR
クエリ:
SELECT hstore->'a' AS a, hstore->'b' AS b,hstore->'c' AS c
FROM table
WHERE
hstore->'x' ILIKE '123%'
or hstore->'y' ILIKE '123%'
or hstore->'z' ILIKE '123%'
インデックスなしのテーブルに対するこのクエリでは、実行時間が 500 ミリ秒を超えます ( explain analyze
)。
すべての属性が 1 つの列にある古い RDBMS インデックス テーブルを使用すると、パフォーマンスは大幅に向上しますが、柔軟性は低くなります。
これらの hstore 属性で異なる/複数のインデックスを試しました。
CREATE INDEX idx_table_hstore ON table( (hstore->'a') )
それぞれに 1 つのインデックスがありますが、パフォーマンスはインデックスがまったくない場合と同じです。
私が理解している限り、列はかなり大きく、幾何学的演算子を必要としないため、GIN/GIST インデックスはあまり意味がありません (私が間違っている可能性があります)。
このような状況で、従来のモデルを使用する場合と同等またはそれ以上のパフォーマンスを達成するには、どのインデックス作成方法を使用しますか?