Postgres st_difference занимает слишком много времени для выполнения для n чисел полигонов - PullRequest
0 голосов
/ 06 марта 2019

У меня есть 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"

Каков наилучший способ сделать это?Спасибо за помощь!

...