ChrisB: Laufzeit mit Entfernungstabelle verkürzen?

Beitrag lesen

Hi,

SELECT

...
,ROUND( 6366.19773095 * ACOS( SIN(0.869112880969) *SIN(RADIANS(ort1.geo_breite)) +COS(0.869112880969) *COS(RADIANS(ort1.geo_breite)) *COS(RADIANS(ort1.geo_laenge) -0.173359191277 ))) distanz
...


>   
> Weil ich dabei bin, die Programmlaufzeiten zu verkürzen, habe ich überlegt, ob die distanz zwischen zwei Orten schneller ermittelt wird, wenn ich eine Entfernungstabelle anlege.  
  
Ich würde erst mal versuchen, die Anzahl der Berechungen, die für jeden Datensatz ausgeführt werden müssen, zu reduzieren.  
  
„Feste“ Bestandteile wie `6366.19773095 * ACOS( SIN(0.869112880969)`{:.language-sql} müsste MySQL zwar m.E. optimieren können (ob es das tut, weiß ich aber nicht) - aber z.B.  
`SIN(RADIANS(ort1.geo_breite)) +COS(0.869112880969) *COS(RADIANS(ort1.geo_breite)) *COS(RADIANS(ort1.geo_laenge)`{:.language-sql}  
muss für jeden Datensatz einzeln ausgerechnet werden, und dabei RADIANS(ort1.geo\_breite) auch noch doppelt, einmal im SIN und einmal im COS.  
  
Wenn in dieser Formel nichts drin steckt, was sich pro Query ändert, sondern alles nur von festen Werten, die in jedem Datensatz drin stecken, abhängt - dann könnte man das Ergebnis der gesamten Formel in einer zusätzlichen Spalte ablegen.  
Die einmal per UPDATE für alle Datensätze befüllt - dann braucht man nachher beim Auslesen der Daten nur noch diesen einen Spaltenwert auslesen, anstatt die Berechnung jedes Mal durchzuführen.  
Und einen Index kann man auch noch darauf setzen, wenn die Dsstanz als Selektions-/Sortierkriterium verwendet werden soll.  
  
MfG ChrisB  
  

-- 
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?