sql >> Database >  >> RDS >> PostgreSQL

Hoe efficiënt is het om op afstand (hele tabel) te bestellen in geodjango

Als je elk item op die tafel op afstand wilt sorteren, zal het traag zijn zoals verwacht en kan er niets worden gedaan (waar ik op dit moment van op de hoogte ben en mijn kennis.)!

U kunt uw berekening efficiënter maken door deze stappen te volgen en enkele aannames te doen:

  1. Schakel ruimtelijke indexering in op uw tafels. Om dat in GeoDjango te doen, volgt u de doc-instructies en pas ze aan uw model aan:

  2. Nu kunt u uw zoekopdracht verfijnen met enkele logische beperkingen:

    Bijvoorbeeld: Mijn gebruiker zoekt niet naar mensen die zich verder dan 50 km van zijn huidige positie bevinden.

  3. Verfijn de zoekopdracht met dwithin ruimtelijke opzoeking die gebruikmaakt van de bovengenoemde ruimtelijke indexering , daarom is het behoorlijk snel.

  4. Pas ten slotte de distance toe bestel door op de resterende rijen.

De uiteindelijke zoekopdracht kan er als volgt uitzien:

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: In plaats van een aangepaste pagineringspoging te maken, is het efficiënter om de pagineringsmethoden voor de django-weergaven te gebruiken:

Of u kunt Django Rest Framework gebruiken en de paginering gebruiken:




  1. Hoe de OR-operator te vervangen door de UNION-operator?

  2. AUTO_INCREMENT en LAST_INSERT_ID

  3. De beste manier om records in MySQL bij te werken vanuit XML-feed

  4. Hoe MySQL gebruiken in WSL (Windows-subsysteem voor Linux)?