Ben*_*Ben 7 postgresql index json postgresql-9.6
例如,假设我有一个中等行数(约 100,000 行)的表,其中一jsonb列包含以下示例数据:
{"name":"Bob", "favoriteColor":"red", "someOtherObject": {"somethingElse": true}}
Run Code Online (Sandbox Code Playgroud)
是否更有效:
在 jsonb 列上使用 GIN 索引,然后使用 Postgres 的内置 JSON 查询函数来提取数据
创建多列来表示可以搜索的内容,即一列用于name,一列用于favoriteColor等;在这些列上构建 b 树索引,然后运行select document from table where name = 'Bob'
一些其他的解决方案?
请记住,解决方案需要有效地支持like查询,以便能够搜索以给定输入字符串开头的值。
Erw*_*ter 11
JSON 的优点是通用性:您可以在不更改表定义的情况下添加任何键。如果您的应用程序可以直接读取和写入 JSON,那么可能会很方便。
单独的列在每个性能方面和其他几个方面都优于组合json或jsonb列:更复杂的类型系统,完整的功能范围(检查、唯一、外键约束、默认值等),表更小,索引更小,查询更快。
对于text列的前缀匹配,您可以使用text_pattern_ops索引:
或者,更一般地说,支持任何 LIKE模式的三元组索引:
虽然您坚持使用 JSON(jsonb特别是),但也有不同的索引策略。GIN 或 Btree 不是唯一要做出的决定。部分索引、表达式索引、不同的操作符类(特别是jsonb_path_ops:)相关:
| 归档时间: |
|
| 查看次数: |
5976 次 |
| 最近记录: |