我对
postgresql如何使用索引有疑问.我在
Postgresql中使用Postgis启用数据库时,基于Geography Type Column的Gist Index Expression存在问题.
我有下表:
CREATE TABLE place ( id serial NOT NULL,name character varying(40) NOT NULL,location geography(Point,4326),CONSTRAINT place_pkey PRIMARY KEY (id ) )
然后我根据列“位置”创建了Gist Index Expression
CREATE INDEX place_buffer_5000m ON place USING GIST (ST_BUFFER(location,5000));
现在假设在表格路径中我有具有Linestring对象的列形状,我想检查该线穿过的5000m多边形(在该位置周围).
我认为下面的查询应该使用“place_buffer_5000m”索引,但不使用它.
SELECT place.name FROM place,route WHERE route.id=1 AND ST_CROSSES(route.shape::geometry,ST_BUFFER(place.location,5000)::geometry))
表位有大约76000行. Analyze and Vacuum在此表上运行,重新创建“place_buffer_5000m”索引,但在上述查询期间未使用索引.
当我在名为“area_5000m”(geograpthy类型)的表格中创建另一列并更新表时,有什么好笑的:
UPDATE place SET area_5000m=ST_BUFFER(location,5000)
然后为此列创建gist索引,如下所示:
CREATE INDEX place_area_5000m ON place USING GIST (area_5000m)
然后使用查询:
SELECT place.name FROM place,place.area_5000m::geometry))
使用索引“place_area_5000m”.
问题是为什么不使用基于位置列计算的索引表达式?
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。