【发布时间】:2020-10-05 12:47:14
【问题描述】:
我在 postgres 中有一个表格,其中包含一些区域和地理数据类型(多边形格式),另一个表格包含产品名称和地理位置(点,4326)。 我试过这个查询
“select st_intersects(schema1.tableA.geom1,schema2.tableB.geom2) from schema1.tableA inner join schema2.tableB on st_intersects(schema1.tableA.geom1,schema2.tableB.geom2)
或者这个:
”select prod_id from schema1.tableA inner join schema2.tableB on st_intersects(schema1.tableA.geom1,schema2.tableB.geom2) where
st_intersects(schema1.tableA.geom1,schema2.tableB.geom2).”
两者都在没有任何输出的情况下运行并且不会停止。 目的是获得特定领域的产品。 Postgis 扩展已插入,我可以将其用于此数据库上的其他任务。
【问题讨论】:
-
您可以尝试使用有限的数据集 - 例如每个表中的 100 行吗?在我看来,它无法处理大量记录。
geom1/2是关键列吗?或者至少被索引? -
Geom1 和 2 已编入索引,带有产品的表有一些记录,所以我使用了“limit 100”但结果相同,查询正在运行..
-
谢谢。
select count(*) from schema1.tableA inner join schema2.tableB on geom1=geom2的工作速度有多快?如果需要时间,那么加入就是问题所在。但如果它在几秒钟内返回,则 st_intersects 是问题所在,您需要检查如何提高此函数的性能 - 例如传递少量记录/或其他一些参数。 -
数据量似乎是,仍在运行 11 分钟。我很好奇选择的逻辑是否可以,我会在小桌子上练习它,但我从未使用过 gis 函数,也没有找到 postgis 的视频教程
-
不要以为你会得到任何输出。你加入 geom1 = geom2 但 geom1 是一个多边形, geom2 是一个点,所以它们总是不同的......只在 st_intersects 上加入......
标签: sql postgresql postgis