我在我的应用程序中使用 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/