쿼리를 최적화하려고합니다. vwml_premelissa를 업데이트하는 테이블에는 3.5mil 레코드가 있습니다. 어떤 레코드를 업데이트해야 하는지를 지정하는 두 번째 테이블 (50k 레코드)이 있습니다.index postgres를 사용하지 않음
"vin"열에 vwml_premelissa에 대한 고유 색인이 있습니다.
CREATE UNIQUE INDEX pkey_vwml_premelissa
ON extras.vwml_premelissa
USING btree
(vin COLLATE pg_catalog."default");
쿼리 ...
update extras.vwml_premelissa
set suppress = 'THREE' where vin in (select vin from extras.vwml_threes)
내 dev에 상자에 시간 이상하고있다. 내가 쿼리에 설명 할 때 나는
Update on vwml_premelissa (cost=1837.07..412393.58 rows=52892 width=182)
-> Hash Semi Join (cost=1837.07..412393.58 rows=52892 width=182)
Hash Cond: ((vwml_premelissa.vin)::text = (vwml_threes.vin)::text)
-> Seq Scan on vwml_premelissa (cost=0.00..219004.32 rows=3685132 width=176)
-> Hash (cost=865.92..865.92 rows=52892 width=24)
-> Seq Scan on vwml_threes (cost=0.00..865.92 rows=52892 width=24)
왜 포스트 그레스는 vwml_premelissa의 서열 스캔을하는 대신이 업데이트해야 레코드를 찾기 위해 인덱스를 사용하여 주장 않는거야?
포스트 그레스 9.2 창
통계가 최신 상태입니까 ('analyze')? 'IN' 대신 join을 시도 할 수도 있습니다. –