PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie effizient ist es, in Geodjango nach Entfernung (gesamte Tabelle) zu bestellen

Wenn Sie jeden Eintrag in dieser Tabelle nach Entfernung sortieren möchten, wird es wie erwartet langsam sein und es gibt nichts, was getan werden kann (das ist mir zu diesem Zeitpunkt und nach meinem Wissen bekannt.)!

Sie können Ihre Berechnung effizienter gestalten, indem Sie diesen Schritten folgen und einige Annahmen treffen:

  1. Aktivieren Sie räumliche Indizierung auf Ihren Tischen. Folgen Sie dazu in GeoDjango the doc-Anleitung und passen Sie sie an Ihr Modell an:

  2. Jetzt können Sie Ihre Abfrage mit einigen logischen Einschränkungen eingrenzen:

    Beispiel: Mein Benutzer sucht nicht weiter als 50 km von seiner aktuellen Position entfernt nach Personen.

  3. Grenzen Sie die Suche mit dwithin Räumliche Suche, die die oben erwähnte räumliche Indexierung , daher ist es ziemlich schnell.

  4. Wenden Sie schließlich den Abstand an Sortieren nach in den verbleibenden Zeilen.

Die letzte Abfrage kann wie folgt aussehen:

current_location = me.location
people = People.objects.filter(
    location__dwithin=(current_location, D(km=50))
).annotate(
    distance=Distance('location', current_location)
).order_by('distance')

PS: Anstatt einen benutzerdefinierten Paginierungsversuch zu erstellen, ist es effizienter, die für die Django-Ansichten bereitgestellten Paginierungsmethoden zu verwenden:

Oder Sie können Django Rest Framework verwenden und dessen Paginierung verwenden: