我有大量具有不均匀属性的非规范化数据(有些属性存在,有些不存在)并将其插入到单个hstore列中。此列包含大约 300 个键/值对,每行总大小为 5000 个字符。我想对其中一些属性进行字符串搜索查询,并在总共 100000 行上使用ilike
和运算符。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
)。
使用我的旧 RDBMS 索引表,其中每个属性都在一个列中,我实现了更好的性能,虽然不太灵活。
我在这些 hstore 属性上尝试了不同/多个索引,比如
CREATE INDEX idx_table_hstore ON table( (hstore->'a') )
每个索引一个,但性能与根本没有索引相同。
据我了解,GIN/GIST 索引没有多大意义,因为该列非常大并且不需要几何运算符(我可能错了)。
在这种情况下,您会使用什么索引方法来获得与使用经典模型相似甚至更好的性能?