我在新的hstore字段中使用Django 1.8和postgresql。我想在我的hstore字段中对值应用索引。但是,阅读postgres'文档我觉得btree索引不是最佳选择,杜松子酒索引更合适,因为我的hstore字段中有很多值,都指的是同一条记录。使用pgAdmin我注意到如果我将db_index = True添加到我的hstore字段,它会创建一个btree索引。 我的问题是:
Raw SQL看起来像这样:
SELECT * from transaction WHERE ("transaction"."hstorefield" -> 'service_code') = somevalue
答案 0 :(得分:0)
GIN很好,但它确实减慢了插入和大幅更新。
CREATE INDEX "ix_hsfield" ON "transaction" USING GIN ("hstorefield");
如果你只需要在一个hstore密钥上加速查询,那么btree是可能的并且会更快(并且在使用大于/小于运算符的查询上会更好)
CREATE INDEX "ix_hsfieldkey" ON "transaction" ((hs_data -> 'service_code'));
如果密钥包含数字数据并且您希望与where子句中的数字进行比较(小于/大于),请确保编写索引,如:
CREATE INDEX "ix_hsfieldkey" ON "transaction" ((hs_data -> 'service_code')::numeric);
-- the index won't be used unless the field used in the queries match the index:
SELECT * from transaction WHERE ("transaction"."hstorefield" -> 'service_code')::numeric = somevalue