我在玩Postgresql 9.3的hstore。我正在嘗試使用並索引hstore列just like documentation states。我的問題是該索引似乎沒有被使用。我給大家舉一個例子:如何在Postgresql中使用hstore列的GIST或GIN索引?
我創建了一個表「人」:
=# CREATE TABLE Person (Id BIGSERIAL PRIMARY KEY NOT NULL, Values hstore);
,並插入測試值:
=# INSERT INTO Person (Values, 'a=>1,b=>3');
然後,如果我來解釋一下它使用操作符「SELECT查詢@在 '價值' 列>」,我意料之中得到:
=# EXPLAIN SELECT P.* FROM Person AS P WHERE P.Values @> hstore('a', '1');
QUERY PLAN
----------------------------------------------------------
Seq Scan on person p (cost=0.00..24.50 rows=1 width=40)
Filter: ("values" @> '"a"=>"1"'::hstore)
沒有索引< - >順序掃描。說得通。無論如何,如果我創建一個GIN或GIST指數也沒關係,該解釋一直談論順序掃描:
=# CREATE INDEX IX_GIN_VALUES ON Person USING GIN (values);
CREATE INDEX
=# EXPLAIN SELECT P.* FROM Person P WHERE P.values @> hstore('a', '1');
QUERY PLAN
----------------------------------------------------------
Seq Scan on person p (cost=0.00..1.01 rows=1 width=246)
Filter: ("values" @> '"age"=>"2"'::hstore)
也許我失去了一些東西明顯?
@maxm:這是否足夠您的信息? –
爲什麼喜歡json或jsonb而不是hstore?我會去了解他們,但你有什麼理由? – maxm
@maxm:它更加靈活,並且可以按照javascript中的原樣使用序列化數據。 –