0

我正在尝试基于两个多边形特征的交集编写一个新列,这些多边形特征在一个表中有 50m 行,我在运行它们之前创建了“gist”索引,但它需要很长时间,而且我无法在 Postgresql 中得到结果。计算中不使用要点索引。如何使用索引进行操作?

该模型附在下面的小提琴中,

小提琴手

CREATE INDEX idx_operation_geom ON public."Operation" USING gist (geom);

CREATE INDEX idx_operation_buffer ON public."Operation" USING gist (buffer);
CREATE INDEX idx_residential_geom ON public."Residential" USING gist (geom);

SELECT 
  ST_Intersection(ST_MakeValid(r.geom),o.buffer) AS intersection,   
  ST_Area(ST_Intersection(ST_MakeValid(r.geom),o.buffer))/ST_Area(r.geom)*100 
FROM public."Residential" r, public."Operation" o 
WHERE ST_Intersects(o.buffer,ST_MakeValid(r.geom));

我尝试使用“解释”检查索引,但我不确定它是如何工作的,

错误:运算符不存在:几何 = 整数第 1 行:EXPLAIN SELECT * FROM public."Operation" where buffer = 2;

任何输入都会非常有帮助。

4

1 回答 1

2

未使用索引,因为您已建立索引geom

CREATE INDEX idx_residential_geom ON public."Residential" USING gist (geom);

但是在可以调用索引的函数中,您正在使用ST_MakeValid(geom)

您可以在插入几何图形时修复它们,并且可以st_makeValid()在所有其他查询中删除语句,或者您必须索引ST_MakeValid()

CREATE INDEX idx_residential_valid_geom ON public."Residential" USING gist (ST_MakeValid(geom));

于 2021-06-22T14:10:45.457 回答