Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie verwende ich Längen-/Breitenwerte effizient in Mysql?

Konzentrieren Sie sich auf (a):

In der Vergangenheit habe ich Teile vorberechnet und Lat, Long, xaxis, yaxis und zxais gespeichert, wobei x, y &z wie folgt definiert sind:

xaxis = cos(radians(Lat)) * cos(radians(Lon))
yaxis = cos(radians(Lat)) * sin(radians(Lon))
zaxis = sin(radians(Lat))

Der Abstand kann dann mit SQL ungefähr wie (acos( xaxis * $xaxis + yaxis * $yaxis + zaxis * $zaxis ) * 6367.0 / 1.852) berechnet werden (wobei diejenigen, die mit einem $ beginnen, für den betreffenden Startpunkt auf die gleiche Weise wie oben vorberechnet werden)

Die Vorabberechnung auf diese Weise verschiebt den relativ teuren Trigger auf ein einmaliges Ereignis und vereinfacht die Abfrage.