Django hstore字段和索引

2024-05-20 17:21:32 发布

您现在位置:Python中文网/ 问答频道 /正文

使用新的SQL和PostDjango字段。我想对hstore字段中的值应用索引。然而,在阅读postgres的文档时,我觉得btree索引不是正确的方法,gin索引更合适,因为我的hstore字段中有许多值,都指向同一个记录。使用pgAdmin时,我注意到,如果我将db_index=True添加到hstore字段中,则会创建一个btree索引。 我的问题是:

  1. btree索引在这里真的没有用吗?我应该不使用它吗?在
  2. 我使用原始sql创建了一个gin索引(在迁移中植入),我想知道这是否足够,我的orm filter/get方法是否可以工作,或者是否也必须覆盖这些方法

原始SQL如下所示:

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

Tags: 方法文档truedbsqlindex记录postgres
1条回答
网友
1楼 · 发布于 2024-05-20 17:21:32

GIN很好,但它确实会大大降低插入和更新的速度。在

CREATE INDEX "ix_hsfield" ON "transaction" USING GIN ("hstorefield");

如果您只需要加快对一个hstore键的查询,btree是可能的,而且速度会稍快一些(在使用大于/小于运算符的查询上效果会更好)

^{pr2}$

如果键包含数字数据,并且您想将(小于/大于)与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

相关问题 更多 >