小编Yan*_*UET的帖子

在未嵌套的 jsonb 列上优化 GROUP BY + COUNT DISTINCT

我正在尝试优化 Postgres 中的查询,但没有成功。

这是我的表:

CREATE TABLE IF NOT EXISTS voc_cc348779bdc84f8aab483f662a798a6a (
  id SERIAL,
  date TIMESTAMP,
  text TEXT,
  themes JSONB,
  meta JSONB,
  canal VARCHAR(255),
  source VARCHAR(255),
  file VARCHAR(255)
);
Run Code Online (Sandbox Code Playgroud)

我有索引idmeta列:

CREATE UNIQUE INDEX voc_cc348779bdc84f8aab483f662a798a6a_id ON voc_cc348779bdc84f8aab483f662a798a6a USING btree(id);
CREATE INDEX voc_cc348779bdc84f8aab483f662a798a6a_meta ON voc_cc348779bdc84f8aab483f662a798a6a USING btree(meta);
Run Code Online (Sandbox Code Playgroud)

此表中有 62k 行。

我试图优化的请求是这样的:

SELECT meta_split.key, meta_split.value, COUNT(DISTINCT(id))
    FROM voc_cc348779bdc84f8aab483f662a798a6a
    LEFT JOIN LATERAL jsonb_each(voc_cc348779bdc84f8aab483f662a798a6a.meta)
    AS meta_split ON TRUE
    WHERE meta_split.value IS NOT NULL
    GROUP BY meta_split.key, meta_split.value;
Run Code Online (Sandbox Code Playgroud)

在这个查询中,meta 是一个像这样的字典:

{
"Age":"50 to …
Run Code Online (Sandbox Code Playgroud)

sql postgresql json query-optimization postgresql-performance

5
推荐指数
1
解决办法
224
查看次数