Ускорьте запрос ST_snap в PostGIS - PullRequest
       17

Ускорьте запрос ST_snap в PostGIS

0 голосов
/ 27 сентября 2019

Объяснение

У меня есть 2 таблицы в PostgreSQL с использованием расширения PostGIS.Обе таблицы представляют улицы как линии линий из провинции.

enter image description here

streetsA Таблица (оранжевые линии) имеет размер таблицы 96 МБ (471026 строк), вторая таблица streetsB (зеленые линии) имеет размер 78 МБ (139708 строк).Улицы немного различаются по своему расположению, поэтому я применил функцию ST_Snap для сопоставления улиц B с улицами A.

create table snapped as select ST_snap(a.geom, b.geom, ST_Distance(a.geom, b.geom)*0.5) from streetsA as a, streetsB as b;

Однако из-за большого размера таблиц запрос занимает более 5часов до завершения.Я ничего не менял в настройках postgres.Это хорошая идея, чтобы выполнить запрос для такого большого набора данных?Имеет ли пространственный индекс смысл для этого запроса?Я использую 16 ГБ ОЗУ с ноутбуком с Core i7.

Метод EXPLAIN дает мне следующий вывод:

  • Nested Loop (cost=0.00..5264516749.25 rows=65806100408 width=32)
  • Seq Scan on streetsa a (cost=0.00..16938.26 rows=471026 width=153)
  • Materialize (cost=0.00..12127.62 rows=139708 width=206)
  • Seq Scan on streets b (cost=0.00..11429.08 rows=139708
...