V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Phishion
V2EX  ›  Django

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

  •  
  •   Phishion · 2021-11-05 15:42:08 +08:00 · 2161 次点击
    这是一个创建于 1146 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    3 条回复    2021-11-06 22:56:19 +08:00
    Vegetable
        1
    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
        2
    dayeye2006199  
       2021-11-06 02:04:31 +08:00
    需要底层数据库的配合。PG 这块东西支持的比较好。
    Phishion
        3
    Phishion  
    OP
       2021-11-06 22:56:19 +08:00
    @dayeye2006199 请问这块儿您有实战过么?需要其它进行什么设置么,还是直接标记索引就可以了?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1232 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:06 · PVG 02:06 · LAX 10:06 · JFK 13:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.