mysql - 如何找到点,根据紧密程度排序,得到1-20、21-40等。高效使用Myisam和mysql以及空间索引

标签 mysql sql geospatial myisam spatial-index

假设我想找到离我最近的 20 个商家。后者我想看看接下来的 20 个最接近的,等等。是的,我有 myisam。我有关于该点的空间索引。我正在寻找我应该发送的实际 SQL 命令。

明确一点:

注意:

  1. 我正在使用mysql myisam空间索引。我在谷歌上来回浏览,但没有找到符合我确切需求的信息。
  2. 我不想计算 整个表的距离(效率太低)。空间索引的全部意义在于,至少你可以有效地摆脱很多点。如果您左侧和上方的某些点不符合条件,那么该点左侧和上方的所有点也不符合条件。
  3. 我不想计算距离 任何仍然效率低下的地区。我感兴趣的区域是 10 公里,那里有 65,000 家企业。
  4. 我不介意计算距离 对于合理的点数,因为我想对点数进行排序 距离并能够显示点1-20、21-40、41-60等。
  5. 我找到了一种为 postgis 做到这一点的方法 http://blog.opengeo.org/2011/09/28/indexed-nearest-neighbour-search-in-postgis/我想要类似的东西,但是对于 mysql myisam。
  6. 我想要一个包含实际 sql 代码作为示例或实际示例 sql 命令的网站。所以请不要只是说“使用空间”。呃。我知道。我想要实际的 sql 命令。
  7. 我不想首先执行搜索小区域的复杂循环。必须有一个 sql 命令可以通过 mysql 引擎有效地一次性完成此操作。
  8. 笛卡尔距离很好。无需知道我们生活在一个地球上,除非您位于北极或南极,而我们的大多数客户并不在那里。

有 160 万个企业。当然,计算所有这些的距离然后对其进行排序是愚蠢的。

这就是地理空间索引发挥作用的地方,对吧?

那么我需要发送什么 SQL 命令?

最佳答案

由于我无法对您的问题发表评论,所以我想我必须将此作为答案。

看看这个问题:

https://gis.stackexchange.com/questions/22082/how-can-i-use-r-tree-to-find-points-within-a-distance-in-spatialite

稍微浏览一下文档,MyIsam 提供的函数似乎没有一个好的方法来做到这一点。

关于mysql - 如何找到点,根据紧密程度排序,得到1-20、21-40等。高效使用Myisam和mysql以及空间索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11131788/

相关文章:

c# - SQL Server 地理与 DbGeography

mysql - RDS - 1205 锁定等待超时超出尝试重新启动事务

python - 如何从txt文件导入数据到django的数据库(mysql)

PHP - SELECT * FROM ...但首先查看数据库中的最后一个元素

php - 如何解决csv文件导入中的单引号错误?

sql - 如何在可能具有空值的字段上创建唯一索引 (Oracle 11g)?

sql - 在 SQL Server 2012 中使用 JSON

r - 来自多边形输入的点网格

java - 如何获取PreparedStatement的SQL?

python - 将复杂的 SQL 查询转换为 SQLAlchemy