Проблема с производительностью pgRouting заключается в том, что новые pgr_astar и pgr_dijkstra используют целый граф (который гарантирует решение, если таковой имеется). Простое решение для повышения производительности - ограничить используемый граф меньшей областью. У него есть свои проблемы, как иногда он может создавать графики, которые не могут быть решены
(SELECT ST_Expand(ST_Extent(geom_way),0.1) as box FROM hh_2po_4pgr as l1 WHERE l1.source =7 OR l1.target = 12)
Создает BBOX для исходной и целевой коллекции и расширяет ее на 0,1 градуса, затем тот же запрос используется для ограничения размера графика в запросе pgr_
Дейкстра от 1.2 с до ~ 65 мс
SELECT seq, id1 AS node, id2 AS edge, g.geom_way as the_geom
FROM pgr_dijkstra(
'SELECT id, source, target, cost FROM hh_2po_4pgr as r,
(SELECT ST_Expand(ST_Extent(geom_way),0.1) as box FROM hh_2po_4pgr as l1 WHERE l1.source =7 OR l1.target = 12) as box
WHERE r.geom_way && box.box',
7, 12, false, false
) as r INNER JOIN hh_2po_4pgr as g ON r.id2 = g.id ;
A * от 2 с до ~ 50 мс
SELECT seq, id1 AS node, id2 AS edge, cost
FROM pgr_astar(
'SELECT id, source, target, cost, x1,y1,x2,y2 FROM hh_2po_4pgr as r,
(SELECT ST_Expand(ST_Extent(geom_way),0.1) as box FROM hh_2po_4pgr as l1 WHERE l1.source =7 OR l1.target = 12) as box
WHERE r.geom_way && box.box',
7, 12, false, false
);
osm2po использовался для импорта данных (finland-latest) в таблицу postgis. добавлен индекс gist в столбец geom_way и проведен полный анализ вакуума для базы данных. разделяемая память 1G. Workmem 512M