加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

postgresql – 基于地理类型列问题的GIST索引表达式

发布时间:2020-12-13 15:52:14 所属栏目:百科 来源:网络整理
导读:我对 postgresql如何使用索引有疑问.我在 Postgresql中使用Postgis启用数据库时,基于Geography Type Column的Gist Index Expression存在问题. 我有下表: CREATE TABLE place( id serial NOT NULL,name character varying(40) NOT NULL,location geography(P
我对 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”.
问题是为什么不使用基于位置列计算的索引表达式?

解决方法

您是否尝试将演员表添加到“功能索引”中?
这有助于确定数据类型.
它应该适用于几何,也可能适用于地理,如下所示:

CREATE INDEX place_buffer_5000m ON place
USING GIST(ST_BUFFER(location,5000)::geometry);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读