【问题标题】:Postgres index creation for jsonb column having JSON Array value为具有 JSON 数组值的 jsonb 列创建 Postgres 索引
【发布时间】:2020-06-10 05:21:25
【问题描述】:

我在 postgres 中有一个员工表,其中有一个 JSON 列“移动”。它存储 JSON 数组值,

e_id(integer)  name(char)   mobile(jsonb)
1              John         [{\"mobile\": \"1234567891\", \"status\": \"verified\"},{\"mobile\": \"1265439872\",\"status\": \"verified\"}]
2              Ben          [{\"mobile\": \"6453637238\", \"status\": \"verified\"},{\"mobile\": \"4437494900\",\"status\": \"verified\"}]

我有一个搜索 api,它查询此表以使用手机号码搜索员工。

如何直接查询手机号码? 我应该如何在 jsonb 列上创建索引以使查询工作更快?

*更新问题

【问题讨论】:

  • 索引仅在要重复 jsonb 列值时才有用。问题是,jsonb列会不会有很多重复值?
  • 是的,在我的情况下会有很多重复。这是一个示例场景。

标签: arrays json postgresql indexing


【解决方案1】:

你可以这样查询:

SELECT e_id, name
FROM employees
WHERE mobile @> '[{"mobile": "1234"}]';

以下索引会有所帮助:

CREATE INDEX ON employees USING gin (mobile);

【讨论】:

  • 我使用了相同的查询,但它总是返回 0 行作为结果。
  • 是不是因为当我使用 select * 查看数据时,我看到如下移动列,"[{\"mobile\": \"1234567891\", \"status\": \ "已验证\"},{\"移动\":\"1265439872\",\"状态\":\"已验证\"}]"
  • 嗯,它对我有用。也许您毕竟没有使用jsonb,或者您在某处有一些空白,或者其他什么。也许您应该提出一个可重现的测试用例并将其添加到问题中。
  • 你用什么程序来查看数据?
  • 仅使用终端
猜你喜欢
  • 1970-01-01
  • 2018-05-29
  • 2021-07-20
  • 2019-03-21
  • 1970-01-01
  • 2015-11-28
  • 2021-08-06
  • 1970-01-01
  • 2018-06-25
相关资源
最近更新 更多