小编Arc*_*oob的帖子

Postgresql:如何索引对象列的 jsonb 数组

我有一个表,其中有一个 jsonb 列,其中包含一个对象数组。

每一行看起来都是这样。

[{grade: 'A', subject: 'MATH'}, {grade: 'B', subject: 'PHY'}...]
Run Code Online (Sandbox Code Playgroud)

现在通过这篇文章查询它/sf/answers/2141445351/

问题来了,完成查询所有具有gradeIN (A, B, C) 的学生的计数至少需要 2.4 秒。

我想得到一些关于索引的帮助,因为我尝试过的索引没有做任何事情。

DROP INDEX idx_subjects_subject;
DROP INDEX idx_subjects_grade;
CREATE INDEX idx_subjects_subject ON results USING GIN((subjects-> 'subject'));
CREATE INDEX idx_subjects_grade ON results USING GIN((subjects-> 'grade'));
Run Code Online (Sandbox Code Playgroud)

还做了(单独):

DROP INDEX idx_subjects_standard;
CREATE INDEX idx_subjects_standard ON results USING GIN(subjects);
Run Code Online (Sandbox Code Playgroud)

我是这样问他们的。

SELECT COUNT(*)
FROM results
WHERE EXISTS 
    (
        SELECT 1 
        FROM jsonb_array_elements(subjects) AS j(data) 
        WHERE (data #>> '{subject}') LIKE '%MATH%' 
        AND 
        (data …
Run Code Online (Sandbox Code Playgroud)

postgresql performance postgresql-9.6 query-performance

6
推荐指数
1
解决办法
1万
查看次数