如何在postgres中使用jsonb索引

How to use jsonb index in postgres

我的PG是9.5+。 我在 'body':

列中有一个 jsonb 数据
{
   "id":"58cf96481ebf47eba351db3b",
   "JobName":"test",
   "JobDomain":"SAW",
   "JobStatus":"TRIGGERED",
   "JobActivity":"ACTIVE"
}

然后我为正文和键创建索引:

CREATE INDEX scheduledjob_request_id_idx ON "ScheduledJob" USING gin ((body -> 'JobName'));
CREATE INDEX test_index ON "ScheduledJob" USING gin (body jsonb_path_ops)

这是我的查询:

SELECT body FROM "ScheduledJob" WHERE body @> '{"JobName": "analytics_import_transaction_job"}';
SELECT body FROM "ScheduledJob" WHERE (body#>'{JobName}' = '"analytics_import_transaction_job"')  LIMIT 10;

这些是 return 正确的数据,但没有人使用索引。 我看到解释了:

->  Seq Scan on public."ScheduledJob"  (cost=0.00..4.55 rows=1 width=532)

所以,我不知道为什么没有使用索引,以及如何正确使用jsonb的索引。

更新:

这个好奇怪,先插入数据怎么让索引有用呢

所以,我做了一些研究和测试:

SELECT body FROM "ScheduledJob" WHERE (body#>'{JobName}' = '"analytics_import_transaction_job"')  LIMIT 10;

这种查询永远不会使用索引。

并且只有table有足够的数据,索引随时可用。