У меня есть 100К полигонов, и я хотел бы сделать st_difference для каждого полигона с типами "TA"
и "SA"
.У меня есть запрос ниже, и это занимает слишком много времени для выполнения -
SELECT (COALESCE(ST_Difference(tna_p.tna, sa_p.sa)))
FROM
(SELECT (shape) AS tna
FROM io
WHERE id ='3586de5a'
AND LOWER(type) =LOWER('TA')) AS tna_p,
(SELECT st_union(shape) AS sa
FROM io
WHERE id ='3586de5a'
AND LOWER(type) =LOWER('SA')) AS sa_p
Объяснить Анализ для 10 полигонов:
Nested Loop (cost=2.22..4.75 rows=1 width=8) (actual
time=0.371..0.819
rows=3 loops=1)"
Seq Scan on io (cost=0.00..2.22 rows=1 width=41) (actual
time=0.023..0.039 rows=3 loops=1)"
Filter: ((id = '3586de5a'::text) AND (lower((type)::text) =
'TNA'::text))"
Rows Removed by Filter: 58"
Aggregate (cost=2.22..2.23 rows=1 width=32) (actual
time=0.086..0.086
rows=1 loops=3)"
Seq Scan on io io_1 (cost=0.00..2.22 rows=1 width=41) (actual
time=0.005..0.016 rows=3 loops=3)"
Filter: ((id = '3586de5a'::text) AND (lower((type)::text) =
’SA’::text))"
Rows Removed by Filter: 58"
Planning time: 0.477 ms"
Execution time: 6.960 ms"
Каков наилучший способ сделать это?Спасибо за помощь!