我有一个带有X、Y和Z坐标的MySQL表。该表的每一行对应于三个空间中的一个特定点。目前,这些数据存储为三个单独的整数列,但如果需要,我可以更改它。
我想查询这个表以找到给定输入点(x,y,z)的最近点。一种简单的方法是为表中的每一行选择SQRT(POW((TableName.X - x), 2) + POW((TableName.Y - y), 2) + POW((TableName.Z - z), 2)) AS Distance
,然后选择Distance
最小的行。
我知道MySQL有一个Point
数据类型,但我不确定这在这里是否有帮助。有谁知道一种计算欧氏距离的有效方法吗?先谢谢你了。
2条答案
按热度按时间busg9geu1#
按
POW((TableName.X - x), 2) + POW((TableName.Y - y), 2) + POW((TableName.Z - z), 2)
排序,不含SQRT
。因为你只关心排序,而平方根是单调递增的,所以你可以跳过平方根。如果没有
SQRT
,数学运算应该足够快。flseospp2#
可以做的一件事是用其可接受的值限制x,y,z。这可以减少对不必要的记录的计算。例如,对于Map,示出了坐标集合的范围的数据点。