sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur effektivt är det att beställa efter avstånd (hela tabellen) i geodjango

Om du vill sortera varje post på den tabellen efter avstånd kommer det att gå långsamt som förväntat och det finns inget som kan göras (som jag är medveten om vid denna tidpunkt och min kunskap.)!

Du kan göra din beräkning mer effektiv genom att följa dessa steg och göra några antaganden:

  1. Aktivera spatial indexering på dina bord. För att göra det i GeoDjango, följ den doc instruktioner och anpassa dem till din modell:

  2. Nu kan du begränsa din fråga med några logiska begränsningar:

    Ex: Min användare kommer inte att leta efter personer mer än 50 km från sin nuvarande position.

  3. Begränsa sökningen med dwithin spatial lookup som använder ovan nämnda spatial indexing a> , därför är det ganska snabbt.

  4. Använd slutligen distance sortera efter på de återstående raderna.

Den slutliga frågan kan se ut så här:

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: Istället för att skapa ett anpassat pagineringsförsök är det mer effektivt att använda sidnumreringsmetoderna som tillhandahålls för django-vyerna:

Eller så kan du använda Django Rest Framework och använda dess paginering:




  1. Ansluter till SQL Server 2012 med sqlalchemy och pyodbc

  2. Hur man lagrar frågeresultat i variabel med mysql

  3. Oracle utlöser uppdatering vid ett annat bord

  4. I SQL Server hur man pivoterar för flera kolumner