A quick review of costs to search with increasing distances. Reference this original post for the code being run.
SELECT DISTINCT ON(g1.gid) g1.gid as gid, g2.gid as gid_ground, g1.x as x, g1.y as y, g2.z as z, g1.z - g2.z as height, g1.the_geom as geometry FROM veg As g1, ground As g2 WHERE g1.gid <> g2.gid AND ST_DWithin(g1.the_geom, g2.the_geom, 3.5) ORDER BY g1.gid, ST_Distance(g1.the_geom,g2.the_geom);This is the total query time comparing 167,000 to 222,000 points using ST_DWithin to do a nearest neighbor search with different search distances.