Sql 用GROUP BY优化postgres的最不合理安排

Sql 用GROUP BY优化postgres的最不合理安排,sql,database,postgresql,relational-database,Sql,Database,Postgresql,Relational Database,我尝试按列的数组值分组,以下是表定义: CREATE TABLE "public"."modifier_arrays" ( "id" INTEGER DEFAULT nextval('modifier_arrays_id_seq'::regclass) NOT NULL UNIQUE, "product_id" INTEGER NOT NULL, "modifier_ids" INTEGER[] NOT NULL, PRIMARY KEY ( "id" ) ); C

我尝试按列的数组值分组,以下是表定义:

CREATE TABLE "public"."modifier_arrays" ( 
   "id" INTEGER DEFAULT nextval('modifier_arrays_id_seq'::regclass) NOT NULL UNIQUE, 
   "product_id" INTEGER NOT NULL, 
   "modifier_ids" INTEGER[] NOT NULL,
   PRIMARY KEY ( "id" )
);
CREATE INDEX "modifier_ids_btree" ON "public"."modifier_arrays" USING btree( "modifier_ids" ASC NULLS LAST );
CREATE INDEX "modifier_ids_gin" ON "public"."modifier_arrays" USING gin( "modifier_ids" );
我用500K行填充它,下面是我正在运行的查询:

SELECT UNNEST(modifier_ids) AS modifier_id FROM modifier_arrays WHERE '{}' <@ modifier_ids   GROUP BY UNNEST(modifier_ids);
哦,这是我的博士后版本:

PostgreSQL 9.1.14

我仍然无法将其降至可接受的性能,如何优化此查询?我没有想法/谷歌关键词:(

因为你没有对聚合做任何事情,所以你可以选择distinct

select distinct unnest(modifier_ids) as modifier_id
from modifier_arrays
where '{}' <@ modifier_ids;
选择不同的unnest(修饰符\u id)作为修饰符\u id
从修饰符数组

哪里{}“我发现了这个问题,在对表进行了大量插入/更新之后,我运行了查询,但速度非常慢,我需要做的是对表进行真空分析。我遗漏了一个自动真空设置…

你能解释一下你试图通过这些操作实现什么吗?我没有得到查询。你为什么要使用
WHERE's{}@vyegorov:我试图根据数组的元素进行分组,例如:1{3,4}2{4,5}我想得到这样的结果:(4,2)(3,1)(5,1)@bf2020:正如表的结构所说,修饰符_id是一个intarray,即数组,其中“{}@bf2020:PostgreSQL数组运算符”
PostgreSQL 9.1.14
select distinct unnest(modifier_ids) as modifier_id
from modifier_arrays
where '{}' <@ modifier_ids;