【发布时间】:2022-10-15 12:51:04
【问题描述】:
我有一个由线段组成的超过 32M 行的表。我知道有些线段是重复的(但没有其他唯一 ID)。我需要知道数据库中有多少独特的几何图形才能估计另一个进程的运行时间(即,我认为如果我过滤掉重复项,我可以限制运行时间)。
【问题讨论】:
-
请检查:How to create a Minimal, Reproducible Example 并更新您的问题。谢谢
我有一个由线段组成的超过 32M 行的表。我知道有些线段是重复的(但没有其他唯一 ID)。我需要知道数据库中有多少独特的几何图形才能估计另一个进程的运行时间(即,我认为如果我过滤掉重复项,我可以限制运行时间)。
【问题讨论】:
您可以先删除重复项,然后再计算。请注意,您必须添加一个序列号 (id) 才能使其正常工作。如果您在几何列中添加了空间索引,ST_DWithin 子句会加快速度。
DELETE FROM schema_name.table_name a
USING schema_name.table_name b
WHERE a.id > b.id
AND ST_Equals(a.geom, b.geom)
AND ST_DWithin(a.geom, b.geom, 0);
然后SELECT COUNT(*) FROM schema_name.table_name。或者,您可以直接计算而不首先删除。
【讨论】:
SELECT DISTINCT ON (ST_AsBinary(geom)) AS geom, id FROM schema_name.table_name