Django hstore字段和索引

时间:2015-10-08 12:59:02

标签: python django postgresql indexing hstore

我在新的hstore字段中使用Django 1.8和postgresql。我想在我的hstore字段中对值应用索引。但是,阅读postgres'文档我觉得btree索引不是最佳选择,杜松子酒索引更合适,因为我的hstore字段中有很多值,都指的是同一条记录。使用pgAdmin我注意到如果我将db_index = True添加到我的hstore字段,它会创建一个btree索引。 我的问题是:

  1. btree索引在这里真的没用,我不应该使用吗?
  2. 我使用原始sql(在我的迁移中种植)创建了一个杜松子酒索引,我想知道这是否足够,以及我的orm filter / get方法是否可行或者我是否必须覆盖这些
  3. Raw SQL看起来像这样:

    SELECT * from transaction WHERE ("transaction"."hstorefield" -> 'service_code') = somevalue
    

1 个答案:

答案 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