Es scheint das benutzen eines array member ein sequentiele scan auslösst, aber wann die gemacht werd mit ein varchar, dann auf einen mal index scan. Die ziel tabelle hat ungefähr 10 millionen reien.
Hier die plans, mann sieht das der erste query ungeheur lang dauern werd (und dauert…), der 2e viel schneller sein werd:
BAG=# explain update dataland set bagpandid=(select pandid from vbo_actueel where vboids[0]=identificatie) where bagpandid is null;
QUERY PLAN
----------------------------------------------------------------------------------------------------
Update on dataland (cost=22113.20..471395813338.50 rows=676805 width=170)
-> Bitmap Heap Scan on dataland (cost=22113.20..471395813338.50 rows=676805 width=170)
Recheck Cond: (bagpandid IS NULL)
-> Bitmap Index Scan on dataland_bagpandid_idx (cost=0.00..21944.00 rows=676805 width=0)
Index Cond: (bagpandid IS NULL)
SubPlan 1
-> **Seq Scan** on vbo_actueel (cost=0.00..696500.91 rows=1 width=17)
Filter: ((dataland.vboids)[0] = (identificatie)::bpchar)
(8 rows)
BAG=# explain update dataland set bagpandid=(select pandid from vbo_actueel where bagpandid=identificatie) where bagpandid is null;
QUERY PLAN
-------------------------------------------------------------------------------------------------------
Update on dataland (cost=22113.20..2393079.83 rows=676805 width=170)
-> Bitmap Heap Scan on dataland (cost=22113.20..2393079.83 rows=676805 width=170)
Recheck Cond: (bagpandid IS NULL)
-> Bitmap Index Scan on dataland_bagpandid_idx (cost=0.00..21944.00 rows=676805 width=0)
Index Cond: (bagpandid IS NULL)
SubPlan 1
-> **Index Scan** using pk_vbo_identificatie on vbo_actueel (cost=0.56..2.78 rows=1 width=17)
Index Cond: ((dataland.bagpandid)::text = (identificatie)::text)
Der 2e query ist nur beispiel, kan nicht so richtig gemacht werden.
Ich hoffe zu verstehen was die Ursache ist…
(und endschuldige meine fehlerhafte deutsche sprache…)
Danke, Jan