如何使用空间索引?
空间索引对于在空间 SQL 查询中获得良好性能非常重要!你需要做两件事才能使用空间索引
- 创建空间索引和;
- 使用“空间索引感知”功能。
要创建空间索引,请使用 CREATE INDEX
命令,但指定 USING GIST
访问方法,如下所示
CREATE INDEX mytable_geom_x ON mytable USING GIST (geom)
当绑定到 GIST
访问方法时,几何的默认索引是 R 树。如果你忘记包含 USING GIST
部分,你将获得一个标准 PostgreSQL“B 树”索引,这是一个非空间索引,并且不会帮助你的查询。
有一组有限的功能可以使用空间索引作为预过滤器,以加快查询速度,如下所示
- ST_LineCrossingDirection
- ST_DWithin
- ST_Touches
- ST_Intersects
- ST_Crosses
- ST_Contains
- ST_ContainsProperly
- ST_Within
- ST_Covers
- ST_CoveredBy
- ST_Overlaps
- ST_DFullyWithin
- ST_3DDWithin
- ST_3DDFullyWithin
- ST_3DIntersects
- ST_OrderingEquals
- ST_Equals
因此,空间连接查询可以使用空间关系函数并像这样获得索引加速
SELECT a.*
FROM a
WHERE ST_Intersects(a.geom, ST_Point(-126, 45, 4326))
并且可以使用空间关系来驱动连接,如下所示
SELECT a.name, b.id
FROM a
JOIN b
ON ST_Contains(a.geom, b.geom)
WHERE a.name = 'Pleasantown'