sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvor effektivt er det at bestille efter afstand (hele tabellen) i geodjango

Hvis du ønsker at sortere hver post på den tabel efter afstand, vil det være langsomt som forventet, og der er intet, der kan gøres (som jeg er klar over på dette tidspunkt og min viden).

Du kan gøre din beregning mere effektiv ved at følge disse trin og gøre nogle antagelser:

  1. Aktiver rumlig indeksering på dine borde. For at gøre det i GeoDjango skal du følge denne doc instruktioner og tilpas dem til din model:

  2. Nu kan du indsnævre din forespørgsel med nogle logiske begrænsninger:

    Eks.: Min bruger vil ikke lede efter personer mere end 50 km fra hans nuværende position.

  3. Indsnævre søgningen ved hjælp af dwithin rumligt opslag, som anvender ovennævnte rumlig indeksering , derfor er det ret hurtigt.

  4. Anvend endelig distance sorter efter på de resterende rækker.

Den endelige forespørgsel kan se sådan ud:

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: I stedet for at oprette et brugerdefineret pagineringsforsøg er det mere effektivt at bruge pagineringsmetoderne til django-visningerne:

Eller du kan bruge Django Rest Framework og bruge dets paginering:




  1. Effektivitet af kvartalsvis beregning af antal ansatte

  2. Udvikling af PostgreSQL til Windows, del 1

  3. Hvordan man kontrollerer, hvad brugere kan dekryptere SQL Server Symmetrisk Key Encryption

  4. sql Optimizer til stor Db-tabel