mysql - 用户空间点列或不在 MySQL 中以提高性能

标签 mysql sql geolocation spatial

我在我的应用程序中使用 MySQL 来存储城市列表。 每个经/纬度代表城市的中心。

我希望能够拉出与某个特定城市相距 X 公里的所有城市。

我的问题是为此目的什么会执行得更快。

  • 使用“点”列,并使用“空间”查询来检索数据?

或者

  • 使用 float 经度列和 float 纬度列。然后在对这些值运行 SQL WHERE BETWEEN 查询之前使用 java 代码生成距离之间的经度/纬度。

我还有一个小问题,请求距纽约 10 公里的所有城市是否有意义。纽约范围何时可能大于 10 公里?

最佳答案

在这种情况下,空间扩展总是更好,因为它基于 R-Tree 索引,该索引针对 N 维空间中的范围搜索进行了优化。

而 native mysql 索引是 B 树,在最好的情况下,只会使用索引中的一个字段(用于范围比较),或者根本不使用索引(如果您使用一些高级地理公式,如另一个公式)答案)。

关于mysql - 用户空间点列或不在 MySQL 中以提高性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16554890/

相关文章:

mysql - 建立不同物理数据库之间的关系

php - 只需使用地址工具栏 php get 方法

php - 如何将此代码修复为唯一的用户名/电子邮件注册

mysql - SQL:对所有行执行相同的操作

php - 如何创建带分页的 'picture gallery'?

sorting - Elasticsearch _geo_distance排序错误

mysql - 根据第一个 SQL select 语句的结果进行选择

mysql - 从表中获取每个主键的顶级数据

javascript - 给定 map 图像,将 x 和 y 坐标转换为纬度和经度

python - Google App Engine Search API 执行基于位置的搜索