我正在玩 postgresql 9.3 的 hstore。我正在尝试使用和索引 hstore 列,就像文档状态一样。我的问题是索引似乎没有被使用。让我给你举个例子:
我创建了一个表“人”:
=# 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)
也许我错过了一些明显的东西?