sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Qué tan eficiente es ordenar por distancia (tabla completa) en geodjango?

Si desea ordenar cada entrada en esa tabla por distancia, entonces será lento como se esperaba y no hay nada que se pueda hacer (que yo sepa en este momento y mi conocimiento).

Puede hacer que su cálculo sea más eficiente siguiendo estos pasos y haciendo algunas suposiciones:

  1. Habilite indexación espacial en vuestras mesas. Para hacerlo en GeoDjango, siga la instrucciones del documento y ajústelos a su modelo:

  2. Ahora puede limitar su consulta con algunas restricciones lógicas:

    Ej: Mi usuario no buscará personas a más de 50 km de su posición actual.

  3. Limite la búsqueda usando dwithin búsqueda espacial que utiliza la indexación espacial , por lo tanto, es bastante rápido.

  4. Finalmente aplica la distance ordenar por en las filas restantes.

La consulta final puede verse así:

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

PD: En lugar de crear un intento de paginación personalizado, es más eficiente utilizar los métodos de paginación proporcionados para las vistas de Django:

O puede usar Django Rest Framework y usar su paginación: