我有一个名为Stores
的表,其中包含10k行,其中包含location geometry(Point,4326)
列。
CREATE INDEX "Stores_spatial_gix"
ON "Stores"
USING gist
(location);
根据KNN查询
explain analyze select *
from "Stores"
order by ST_distance_sphere(location,st_point(-82.373978, 29.633657)) limit 3
我每次大约800毫秒。我花了多长时间做错了什么?
答案 0 :(得分:0)
如果您要使用KNN且Postgres> = 9.5且postgis> = 2.2,请使用KNN运算符
SELECT *
FROM "Stores"
ORDER BY geom <-> 'SRID=4326;POINT(-82.373978, 29.633657)'::geometry limit 3
此外,如果您使用SRID = 4326,那么我建议您使用地理位置,而不是几何类型>
如果由于PostGIS的较旧版本而不能使用<->运算符,那么我建议使用st_dwithin,该距离的中间值应为1000或2000米(或更适合于您的应用程序)。如果必须返回至少3点,即使它们在世界的另一端,也可以编写一个函数,该函数的st_dwithin值应递增,直到返回至少3行为止。