假设我想找到离我最近的 20 个商家。后者我想看看接下来的 20 个最接近的,等等。是的,我有 myisam。我有关于该点的空间索引。我正在寻找我应该发送的实际 SQL 命令。
明确一点:
注意:
- 我正在使用mysql myisam空间索引。我在谷歌上来回浏览,但没有找到符合我确切需求的信息。
- 我不想计算 整个表的距离(效率太低)。空间索引的全部意义在于,至少你可以有效地摆脱很多点。如果您左侧和上方的某些点不符合条件,那么该点左侧和上方的所有点也不符合条件。
- 我不想计算距离 任何仍然效率低下的地区。我感兴趣的区域是 10 公里,那里有 65,000 家企业。
- 我不介意计算距离 对于合理的点数,因为我想对点数进行排序 距离并能够显示点1-20、21-40、41-60等。
- 我找到了一种为 postgis 做到这一点的方法 http://blog.opengeo.org/2011/09/28/indexed-nearest-neighbour-search-in-postgis/我想要类似的东西,但是对于 mysql myisam。
- 我想要一个包含实际 sql 代码作为示例或实际示例 sql 命令的网站。所以请不要只是说“使用空间”。呃。我知道。我想要实际的 sql 命令。
- 我不想首先执行搜索小区域的复杂循环。必须有一个 sql 命令可以通过 mysql 引擎有效地一次性完成此操作。
- 笛卡尔距离很好。无需知道我们生活在一个地球上,除非您位于北极或南极,而我们的大多数客户并不在那里。
有 160 万个企业。当然,计算所有这些的距离然后对其进行排序是愚蠢的。
这就是地理空间索引发挥作用的地方,对吧?
那么我需要发送什么 SQL 命令?
最佳答案
由于我无法对您的问题发表评论,所以我想我必须将此作为答案。
看看这个问题:
稍微浏览一下文档,MyIsam 提供的函数似乎没有一个好的方法来做到这一点。
关于mysql - 如何找到点,根据紧密程度排序,得到1-20、21-40等。高效使用Myisam和mysql以及空间索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11131788/