Windows 上的 postgresql 9.5 + postgis 2.2。
我首先创建一个表:
CREATE TABLE points (
id SERIAL,
ad CHAR(40),
name VARCHAR(200)
);
然后,添加一个几何字段“geom”:
select addgeometrycolumn('points', 'geom', 4326, 'POINT', 2);
并在其上创建要点索引:
CREATE INDEX points_index_geom ON points USING GIST (geom);
然后,我在表中插入大约 1,000,000 个点。
我想查询距给定点给定距离内的所有点。
这是我的sql代码:
SELECT st_astext(geom) as location FROM points
WHERE st_distance_sphere(
st_geomfromtext('POINT(121.33 31.55)', 4326),
geom) < 6000;
结果是我想要的,但是太慢了。
当我explain analyze verbose
在这段代码中,我发现它没有使用points_index_geom(解释显示seq扫描并且没有索引)。
所以我想知道为什么它不使用索引,我应该如何改进?