带几何列的索引表

时间:2015-07-12 16:12:54

标签: postgresql postgis

我有一个名为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毫秒。我花了多长时间做错了什么?

1 个答案:

答案 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行为止。