mysql 基于3D欧氏距离的查询最有效的方法是什么?

esyap4oy  于 2023-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(126)

我有一个带有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数据类型,但我不确定这在这里是否有帮助。有谁知道一种计算欧氏距离的有效方法吗?先谢谢你了。

busg9geu

busg9geu1#

POW((TableName.X - x), 2) + POW((TableName.Y - y), 2) + POW((TableName.Z - z), 2)排序,不含SQRT
因为你只关心排序,而平方根是单调递增的,所以你可以跳过平方根。如果没有SQRT,数学运算应该足够快。

flseospp

flseospp2#

可以做的一件事是用其可接受的值限制x,y,z。这可以减少对不必要的记录的计算。例如,对于Map,示出了坐标集合的范围的数据点。

相关问题