sql >> Databáze >  >> RDS >> PostgreSQL

Jak efektivní je objednávat podle vzdálenosti (celý stůl) v geodjango

Pokud chcete seřadit každý záznam na tomto stole podle vzdálenosti, bude to podle očekávání pomalé a nedá se nic dělat (toho jsem si v tuto chvíli a svých znalostí vědom).

Výpočet můžete zefektivnit provedením těchto kroků a vytvořením některých předpokladů:

  1. Povolit prostorové indexování na vašich stolech. Chcete-li to provést v GeoDjango, postupujte podle pokyny k dokumentu a přizpůsobte je svému modelu:

  2. Nyní můžete svůj dotaz zúžit pomocí některých logických omezení:

    Příklad: Můj uživatel nebude hledat lidi vzdálenější než 50 km od jeho aktuální pozice.

  3. Zúžit vyhledávání pomocí dwithin prostorové vyhledávání, které využívá výše uvedené prostorové indexování , takže je to docela rychlé.

  4. Nakonec použijte distance seřaďte podle na zbývajících řádcích.

Konečný dotaz může vypadat takto:

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

P.S: Spíše než vytvoření vlastního pokusu o stránkování je efektivnější použít metody stránkování poskytované pro zobrazení django:

Nebo můžete použít Django Rest Framework a použít jeho stránkování:




  1. Víceřádkové aktualizace PostgreSQL v Node.js

  2. Jak zjistit, do kterého oddílu by šel řádek, vzhledem ke známé hodnotě klíče oddílu v Oracle?

  3. SQL křížový odkaz na jinou tabulku pro kontrolu dat

  4. Pandas read sql integer se stal float