使用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行)上运行良好,但在此之上却开始崩溃,很奇怪。
答案 0 :(得分:0)
经过大量测试,我终于找到了不稳定的原因:
单个用户在数据库中具有无效的纬度/经度坐标(-100、100),可能是由于通过phpmyadmin进行的人为干预。
纬度应在-90.0和90.0之间, 和经度在-180.0至180.0之间
当该用户最终落入我们的搜索范围之内时,查询崩溃。这就是为什么所有参数都会影响误差(极限说明,半径范围和中心点)的原因。用户输入结果后,事情就变得一团糟。
经验教训,保护您的数据!