Ich bin neu in MySQL haben, aber die folgende Abfrage erstellt, dieoptimieren Zunder Typ mysql query
- in der Nähe Benutzer findet eine Tabelle von latlong POINTs (Tabelle pos) verwenden.
- Entfernt Benutzer, die bereits bewertet wurden (Table Swipes).
- Verbindet die Ergebnisse mit der Benutzertabelle.
Z.B. Leute finden, in der Nähe von POINT (95,95) für Benutzer mit id = 1 (latlong Werte vereinfacht)
SELECT users.id, name, email, gender, birthyear, latlong FROM (
SELECT * FROM (
# Find nearby users.
SELECT * FROM pos
WHERE X(latlong) BETWEEN 90.0 AND 100.0
AND Y(latlong) BETWEEN 90.0 AND 100.0
) AS nearby WHERE owner NOT IN (
# Find users already rated.
SELECT target FROM swipes WHERE owner = 1
) AND id != 1
) AS unratedNearby JOIN users ON unratedNearby.owner = users.id;
alles perfekt, aber ich bin besorgt über die Komplexität dieser Abfrage und wie das funktioniert, wird es skaliert werden. Ich habe eine SPATIAL KEY 'latlong' ('latlong')
auf Tisch pos (ich weiß, dies ist eine suboptimale Möglichkeit, in der Nähe von Benutzern zu finden, aber Genauigkeit ist nicht so wichtig hier). Jeder Benutzer kann unendlich viele Wischbewegungen ausführen.
Wird diese Abfrage abbrechen, wenn die Tabellen "users" und "swipes" sehr groß werden? Gibt es irgendwelche Indizes, die ich neben dem räumlichen Schlüssel verwenden sollte?
Sie sollten mehr Informationen über Ihre Tabellen Struktur und mindestens erklären, warum Antworten unten nicht qualifizieren – RuslanN