Thorsten: Umkreissuche sehr langsam

Beitrag lesen

Morgen

Meine Umkreissuche ist leider sehr langsam. Bei z.b. 5000 Datensätzen gibt es nur noch ein Timeout.

Es gibt 2 Tabellen orte wo sich die plz mit den Koordinaten aufhalten und die Tabelle Events wo die plz und die daten zu den Events gespeichert sind.

Meine SQL abfrage schaut so aus.

SELECT
    o.ort,
    o.plz,
    e.event_id,
    e.kat_id,
    e.titel,
    e.fsa_datum,
    e.location,
    k.kategorie,
    b.thumb,
    (6367.41*SQRT(2*(1-cos(RADIANS(breite))
    *cos(".$breite.")*(sin(RADIANS(laenge))
    *sin(".$laenge.")+cos(RADIANS(laenge))
    *cos(".$laenge."))-sin(RADIANS(breite))
    *sin(".$breite."))))
    AS Distance
    FROM
    orte AS o
    JOIN
    event AS e
    ON o.plz = e.plz
    JOIN
    event_kat AS k
    ON e.kat_id = k.kat_id
    LEFT JOIN
    bilder AS b
    ON e.event_id = b.event_id OR b.event_id IS NULL
    WHERE
    e.gespert = 0
    AND
    6367.41*SQRT(2*(1-cos(RADIANS(breite))
    *cos(".$breite.")
    *(sin(RADIANS(laenge))
    *sin(".$laenge.")+cos(RADIANS(laenge))
    *cos(".$laenge."))-sin(RADIANS(breite))
    *sin(".$breite."))) <= ".$umkreis."
    ORDER BY Distance
OR e.plz = '$plz'

Ich bekomme es einfach nicht hin, diese Abfrage so zu optimieren das es erheblich schneller geht.

Die Event Tabelle sollte problemlos mehrere 100.000 Datensätze aufnehmen. Aber mit der Jetzigen Abfrage wird das unmöglich sein.

Ich verwende MYSQL 5.0.34 auf dem Webspace.

Das weitere Problem ich benötige eine Blätterfunktion für die Ergebnisse. Um die Anzahl der Datensätze zu ermitteln lasse ich fast die gleiche Abfrage 2 mal auf die DB los. Der Umkreis in dem gesucht wird liegt bei max 200km. Die geo Daten kommen von opengeodb. Und sind auf das minimum reduziert. Sprich 8180 plz in der Tabelle Orte.

Bin echt DAnkbar für jede Hilfe