不稳定的MySQL st_distance_sphere结果

时间:2019-03-10 22:55:35

标签: mysql sql

使用st_distance_sphere时MySQL给出的结果看起来确实不稳定。

在用户表上运行此查询: (距该点9.45公里以内的用户列表)

select *, st_distance_sphere(`location`, ST_GeomFromText('point(-74.0104915 45.5576996)')) as distance from `users` having `distance` < 9450

返回正确的结果。

但从查询半径中删除1米:

select *, st_distance_sphere(`location`, ST_GeomFromText('point(-74.0104915 45.5576996)')) as distance from `users` having `distance` < 9449

给我以下SQL语法错误:#1210 - Incorrect arguments to st_distance_sphere

我还注意到,添加一个limit语句会根据限制数更改查询中断点。

有人对这种查询有类似的经历吗?我无法弄清楚这里发生了什么。

我正在使用MySQL 5.7

谢谢!

编辑: 进一步的测试表明,该查询在较小的数据集(<〜2-3k行)上运行良好,但在此之上却开始崩溃,很奇怪。

1 个答案:

答案 0 :(得分:0)

经过大量测试,我终于找到了不稳定的原因:

单个用户在数据库中具有无效的纬度/经度坐标(-100、100),可能是由于通过phpmyadmin进行的人为干预。

纬度应在-90.0和90.0之间, 和经度在-180.0至180.0之间

当该用户最终落入我们的搜索范围之内时,查询崩溃。这就是为什么所有参数都会影响误差(极限说明,半径范围和中心点)的原因。用户输入结果后,事情就变得一团糟。

经验教训,保护您的数据!