我正在尝试提高查询的性能。从教程我读到,首先运行EXPLAIN (ANALYZE, BUFFERS)
是一件好事。经过快速检查和this网站的帮助后,看起来我在内循环方面遇到了一些问题,但我不知道如何改进它。我在geoms上创建了3d索引,在id列上创建了普通索引。通常,此查询返回从每个点到线的最近3d距离:
EXPLAIN (ANALYZE, BUFFERS)
SELECT
(ST_3DDistance(veg.geom_veg3Dgr, cables.geom) - veg.z_veg_gr) falldist,
ST_3DDistance(veg.geom_veg3D, cables.geom) dist3d,
ST_3DClosestPoint(cables.geom, veg.geom_veg3D) closeST_pt,
ST_Distance(veg.geom_veg2D, cables.geom) dist2d,
FROM (
SELECT p.ID AS vegId,
(
SELECT wire.id
FROM wire_voltage_temp AS wire
WHERE ST_Dwithin(p.geom_veg2D, wire.geom, 70)
ORDER BY ST_3DDistance(wire.geom, p.geom_veg3D) ASC
LIMIT 1
) AS g2
FROM veg_span_temp AS p
OFFSET 0
) AS q
JOIN veg_span_temp AS veg
ON q.vegId = veg.id
JOIN wire_voltage_temp AS cables
ON q.g2 = cables.id;