在 table 中对 50m 行的操作期间不考虑创建的要点索引

The created gist index is not considered during the operation for 50m rows in a table

我正在尝试根据两个多边形特征的交集编写一个新列,这两个多边形特征在一个 table 中有 50m 行,我已经在 运行 它们之前创建了“要点”索引,但是它需要永远,我无法在 Postgresql 中得到结果。计算中不使用要点索引。如何使用索引进行操作?

模型附在下面fiddle,

dbfiddle

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));

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

ERROR: operator does not exist: geometry = integer LINE 1: EXPLAIN SELECT * FROM public."Operation" where buffer = 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));