![](/img/trans.png)
[英]Whats the equivalent of ST_DWithin (PostGIS - PostgreSQL) for MySQL?
[英]MySQL Postgresql / PostGIS
我有4亿行分区的mysql表中的lat / lon坐标。 该表每分钟增长2000条记录,旧数据每隔几周刷新一次。 我正在探索如何对这些数据进行空间分析。
大多数分析需要查找某个点是否在特定的纬度/经度多边形中,或者哪个多边形包含该点。
我看到了以下解决多边形点(PIP)问题的方法:
创建一个mysql函数,它接受一个点和一个Geometry并返回一个布尔值。 简单但不确定如何使用几何来执行lat / lon坐标上的操作,因为Geometry假设平面而不是球体。
创建一个mysql函数,它接受自定义数据结构的一个点和标识符并返回一个布尔值。 多边形顶点可以存储在表格中,函数可以使用球形数学计算PIP。 大量的多边形点可能会导致庞大的表和慢查询。
将点数据保留在mysql中并在PostGIS中存储多边形数据,并使用app服务器通过将点作为参数在PostGIS中运行PIP查询。
将应用程序从MySQL移植到Postgresql / PostGIS。 这将需要花费大量精力来重写查询和过程。 我仍然可以做到这一点,但Postgresql处理4亿行有多好。 在Google上快速搜索“mysql 10十亿行”会返回许多结果。 Postgres的相同查询不返回相关结果。
想听听一些想法和建议。
一些想法。
首先,PostgreSQL和MySQL在性能调优方面完全不同。 因此,如果你去移植路线准备重新考虑你的索引策略。 PostgreSQL不仅具有比MySQL更灵活的索引,而且表格方法也非常不同,这意味着适当的索引策略与策略不同。 不幸的是,这意味着你可能会有点挣扎。 如果我可以给出建议,我会建议首先丢弃所有非关键索引,然后根据需要谨慎地添加它们。
第二点是,此时没有人可能会给你大量的实用建议,因为我们不知道你的程序的内部。 在PostgreSQL中,你最好只索引你需要的东西,但你可以索引函数的输出(这在这种情况下非常有用 ),你只能索引表的一部分。
我更像是一个PostgreSQL人而不是MySQL人,所以我认为你应该选择PostgreSQL。 然而,不是告诉你为什么等等,并且让你在这个规模上挣扎,我会告诉你一些我想看的东西,如果我试图这样做的话。
最后,在这个卷上切换db将是一个学习曲线,你需要做好准备。 但是,PostgreSQL可以很好地处理音量。
行数在这里是无关紧要的。 问题是索引可以完成多边形工作的重点。
答案取决于多边形的大小。
PostGIS可以非常快速地找到多边形边界框中的所有点。 然后,需要花费更多精力来确定该点是否实际位于多边形内。
如果您的多边形很小(小边界框),查询将是有效的。 如果您的多边形很大或者形状使得边界框大,那么它的效率就会降低。
如果您的多边形或多或少是静态的,那么就有解决方法。 您可以将多边形划分为较小的多边形并重新创建idnex。 那么索引会更有效率。
如果您的多边形实际上是多边形,则第一步是使用ST_Dump将多边形分割为多边形,然后重新创建并在结果上构建索引。
HTH
尼克拉斯
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.