PostgreSql应用并行顺序扫描而不是索引扫描

PostgreSql应用并行顺序扫描而不是索引扫描,postgresql,indexing,sql-execution-plan,Postgresql,Indexing,Sql Execution Plan,我在所有列Juliet、Five、Juilet1到Juliet15上都有索引,即使PostgresSQL正在进行并行顺序扫描,而不是索引扫描。为什么会这样 PostgresSql查询是 SELECT juliet FROM romeo WHERE (((romeo.juliet1 IN ('S66.303S', 'S66303S', 'S52.009S', 'S52009S', 'S32.466G', 'S32466G', 'H44.139', 'H44139', 'H35.732', 'H3

我在所有列Juliet、Five、Juilet1到Juliet15上都有索引,即使PostgresSQL正在进行并行顺序扫描,而不是索引扫描。为什么会这样

PostgresSql查询是

SELECT juliet FROM romeo 
WHERE (((romeo.juliet1 IN ('S66.303S', 'S66303S', 'S52.009S', 'S52009S', 'S32.466G', 'S32466G', 'H44.139', 'H44139', 'H35.732', 'H35732') 
   OR romeo.juliet2 IN ('S66.303S', 'S66303S', 'S52.009S', 'S52009S', 'S32.466G', 'S32466G', 'H44.139', 'H44139', 'H35.732', 'H35732') 
   OR romeo.juliet3 IN ('S66.303S', 'S66303S', 'S52.009S', 'S52009S', 'S32.466G', 'S32466G', 'H44.139', 'H44139', 'H35.732', 'H35732') 
   OR romeo.juliet4 IN ('S66.303S', 'S66303S', 'S52.009S', 'S52009S', 'S32.466G', 'S32466G', 'H44.139', 'H44139', 'H35.732', 'H35732') 
   OR romeo.juliet5 IN ('S66.303S', 'S66303S', 'S52.009S', 'S52009S', 'S32.466G', 'S32466G', 'H44.139', 'H44139', 'H35.732', 'H35732') 
   OR romeo.juliet6 IN ('S66.303S', 'S66303S', 'S52.009S', 'S52009S', 'S32.466G', 'S32466G', 'H44.139', 'H44139', 'H35.732', 'H35732') 
   OR romeo.juliet7 IN ('S66.303S', 'S66303S', 'S52.009S', 'S52009S', 'S32.466G', 'S32466G', 'H44.139', 'H44139', 'H35.732', 'H35732') 
   OR romeo.juliet8 IN ('S66.303S', 'S66303S', 'S52.009S', 'S52009S', 'S32.466G', 'S32466G', 'H44.139', 'H44139', 'H35.732', 'H35732') 
   OR romeo.juliet9 IN ('S66.303S', 'S66303S', 'S52.009S', 'S52009S', 'S32.466G', 'S32466G', 'H44.139', 'H44139', 'H35.732', 'H35732') 
   OR romeo.juliet10 IN ('S66.303S', 'S66303S', 'S52.009S', 'S52009S', 'S32.466G', 'S32466G', 'H44.139', 'H44139', 'H35.732', 'H35732') 
   OR romeo.juliet11 IN ('S66.303S', 'S66303S', 'S52.009S', 'S52009S', 'S32.466G', 'S32466G', 'H44.139', 'H44139', 'H35.732', 'H35732') 
   OR romeo.juliet12 IN ('S66.303S', 'S66303S', 'S52.009S', 'S52009S', 'S32.466G', 'S32466G', 'H44.139', 'H44139', 'H35.732', 'H35732') 
   OR romeo.juliet13 IN ('S66.303S', 'S66303S', 'S52.009S', 'S52009S', 'S32.466G', 'S32466G', 'H44.139', 'H44139', 'H35.732', 'H35732') 
   OR romeo.juliet14 IN ('S66.303S', 'S66303S', 'S52.009S', 'S52009S', 'S32.466G', 'S32466G', 'H44.139', 'H44139', 'H35.732', 'H35732') 
   OR romeo.juliet15 IN ('S66.303S', 'S66303S', 'S52.009S', 'S52009S', 'S32.466G', 'S32466G', 'H44.139', 'H44139', 'H35.732', 'H35732') 
   OR romeo.five IN ('S66.303S', 'S66303S', 'S52.009S', 'S52009S', 'S32.466G', 'S32466G', 'H44.139', 'H44139', 'H35.732', 'H35732'))));
这是解释分析生成的查询计划。正如你所看到的,平行顺序扫描正在罗密欧身上应用

Gather  (cost=1000.000..2459531.510 rows=14964 width=9) (actual time=734.439..11268.059 rows=376 loops=1)
    Workers Planned: 2
    Workers Launched: 2
  ->  Parallel Seq Scan on romeo  (cost=0.000..2457035.110 rows=6235 width=9) (actual time=741.013..11256.264 rows=125 loops=3)
          Filter: (((juliet1)::text = ANY ('three'::text[])) OR ((juliet2)::text = ANY ('three'::text[])) OR ((juliet3)::text = ANY ('three'::text[])) OR ((juliet4)::text = ANY ('three'::text[])) OR ((juliet5)::text = ANY ('three'::text[])) OR ((juliet6)::text = ANY ('three'::text[])) OR ((juliet7)::text = ANY ('three'::text[])) OR ((juliet8)::text = ANY ('three'::text[])) OR ((juliet9)::text = ANY ('three'::text[])) OR ((juliet10)::text = ANY ('three'::text[])) OR ((juliet11)::text = ANY ('three'::text[])) OR ((juliet12)::text = ANY ('three'::text[])) OR ((juliet13)::text = ANY ('three'::text[])) OR ((juliet14)::text = ANY ('three'::text[])) OR ((juliet15)::text = ANY ('three'::text[])) OR ((five)::text = ANY ('three'::text[])))
          Rows Removed by Filter: 4774850
Planning time: 0.533 ms
Execution time: 60030.289 ms
表上所有索引的Index语句

CREATE INDEX juliet1_idx_pd_activity ON pd_activity (juliet1);
CREATE INDEX juliet2_idx_pd_activity ON pd_activity (juliet2);
CREATE INDEX juliet3_idx_pd_activity ON pd_activity (juliet3);
CREATE INDEX juliet4_idx_pd_activity ON pd_activity (juliet4);
CREATE INDEX juliet5_idx_pd_activity ON pd_activity (juliet5);
CREATE INDEX juliet6_idx_pd_activity ON pd_activity (juliet6);
CREATE INDEX juliet7_idx_pd_activity ON pd_activity (juliet7);
CREATE INDEX juliet8_idx_pd_activity ON pd_activity (juliet8);
CREATE INDEX juliet9_idx_pd_activity ON pd_activity (juliet9);
CREATE INDEX juliet10_idx_pd_activity ON pd_activity (juliet10);
CREATE INDEX juliet11_idx_pd_activity ON pd_activity (juliet11);
CREATE INDEX juliet12_idx_pd_activity ON pd_activity (juliet12);
CREATE INDEX juliet13_idx_pd_activity ON pd_activity (juliet13);
CREATE INDEX juliet14_idx_pd_activity ON pd_activity (juliet14);
CREATE INDEX juliet15_idx_pd_activity ON pd_activity (juliet15);

你能为表中的索引添加
CREATE INDEX
语句吗?表中还有多少列?这怎么不爆炸<代码>'three'::text[]问题中的查询似乎与用于生成执行计划的查询不同。该计划显示条件
((juliet1)::text=ANY('three'::text[])
,该条件转换为
juliet1 in('three')
-这不是查询中显示的条件