PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak wydajne jest zamawianie według odległości (cała tabela) w geodjango

Jeśli chcesz posortować każdy wpis w tej tabeli według odległości, będzie to przebiegało powoli zgodnie z oczekiwaniami i nie można nic zrobić (o czym jestem świadomy w tym momencie i posiadam wiedzę).

Możesz zwiększyć wydajność swoich obliczeń, wykonując następujące kroki i przyjmując pewne założenia:

  1. Włącz indeksowanie przestrzenne na twoich stołach. Aby to zrobić w GeoDjango, postępuj zgodnie z instrukcje dotyczące dokumentów i dopasuj je do swojego modelu:

  2. Teraz możesz zawęzić zapytanie, stosując pewne ograniczenia logiczne:

    Przykład: Mój użytkownik nie będzie szukał osób znajdujących się dalej niż 50 km od jego aktualnej pozycji.

  3. Zawęź wyszukiwanie za pomocą dwithin wyszukiwanie przestrzenne, które wykorzystuje wspomniane powyżej indeksowanie przestrzenne , dlatego jest dość szybki.

  4. Na koniec zastosuj distance uporządkuj według pozostałych wierszy.

Ostateczne zapytanie może wyglądać tak:

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: Zamiast tworzyć niestandardową próbę stronicowania, bardziej efektywne jest wykorzystanie metod stronicowania dostarczonych dla widoków django:

Możesz też użyć Django Rest Framework i użyć jego paginacji:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Opcjonalny argument w funkcji PL/pgSQL

  2. Jak odziedziczyć uprawnienia roli?

  3. Jak zapewnić Npgsql niestandardowy typ danych jako parametr?

  4. Jak uciec przed znakiem zapytania (?) za pomocą Spring JpaRepository?

  5. Błąd:EXDEV:niedozwolone łącze między urządzeniami, zmień nazwę „/tmp/ na Ubuntu 16.04 LTS