fastix®: Laufzeit mit Entfernungstabelle verkürzen?

Beitrag lesen

Moin!

Würde ein Key auf Länge und Breite die Berechnung beschleunigen?

Nein. Du machst vermutlich eine Umkreissuche und Vincenz hat richtig ausgeführt, dass MySQL keine funktionalen Indizes kennt.

Wenn es wirklich sehr viele Abfragen sind (wird ja wohl der Kern Deines Skriptes sein), dann lohnt es sich eine Tabelle anzulegen, die jeweils die Entfernungen zwischen den Locations beinhaltet:

LOC_ID_1; LOC_ID_2 ENTF
12200;123567;556.45

Dann kannst Du Mit einem

SELECT LOC_ID_1, LOC_ID_2, FROM entfernungen
WHERE
ENTF <= $entf
AND (
(LOC_ID_1 = $intLOC)
OR
(LOC_ID_2 = $intLOC)
);

Deine Datentabelle hat dann zwar eine ganze Menge Einträge, aber den Speicher zu investieren lohnt sich.

Noch zwei Tipps für das Anlegen der Tabelle:

1.) Bereits angelegte Paare solltest Du nicht nochmals anlegen. Mach also sowas:

for $ort_1 = 1 To end
{
  for $ort2 = ($ort_1+1) to end
  {

// Berechnen und Einpflegen der Daten in Mysql
  }
}

2. Es handelt sich um das Anlegen einer großen Anzahl von Datensätzen. Lege die Indizies  für diese Tabelle (alle 3 Spalten)erst nach dem Befüllen an. Das ist deutlich(!) schneller.

MFFG (Mit freundlich- friedfertigem Grinsen)

fastix