请问 Django 的 JSONField 字段有没有必要进行索引?

2021-11-05 15:42:08 +08:00
 Phishion

比如我有一个 JSONField 字段,内容如下

{
    "A": 1,
    "B": 2
}

我想筛选字段 "A" 的值为 2 ,或者 字段里面包含 B 这个 Key ,这种条件下,Django 的索引会加快查询速度么?

2162 次点击
所在节点    Django
3 条回复
Vegetable
2021-11-05 15:48:19 +08:00
其实文档里有介绍一些

https://docs.djangoproject.com/zh-hans/3.2/ref/models/fields/#jsonfield

索引

Index 和 Field.db_index 都创建了一个 B 树索引,在查询 JSONField 的时候并不是特别有用。仅在 PostgreSQL 上,可以使用 GinIndex 比较适合。

PostgreSQL 用户

PostgreSQL 有两种基于 JSON 的原生数据类型:json 和 jsonb 。json 和 jsonb 。它们之间的主要区别在于它们的存储方式和查询方式。PostgreSQL 的 json 字段是作为 JSON 的原始字符串表示来存储的,当根据键来查询时,必须同时进行解码。jsonb 字段是基于 JSON 的实际结构存储的,它允许索引。这样做的代价是在写入 jsonb 字段时增加了一点成本。JSONField 使用 jsonb 。

Oracle 用户

Oracle 数据库不支持存储 JSON 标量值。只支持 JSON 对象和数组(在 Python 中使用 dict 和 list 表示)。
dayeye2006199
2021-11-06 02:04:31 +08:00
需要底层数据库的配合。PG 这块东西支持的比较好。
Phishion
2021-11-06 22:56:19 +08:00
@dayeye2006199 请问这块儿您有实战过么?需要其它进行什么设置么,还是直接标记索引就可以了?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/813305

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX