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

¿Cuál es el orden predeterminado de una lista devuelta por una llamada de filtro de Django?

No hay NINGÚN ORDEN POR DEFECTO , un punto que no se puede enfatizar lo suficiente porque todos lo hacen mal.

Una tabla en una base de datos no es una tabla html ordinaria, es un conjunto desordenado de tuplas. A menudo sorprende a los programadores que solo utilizan MySQL porque en esa base de datos en particular, el orden de las filas suele ser predecible debido a que no aprovecha algunas técnicas de optimización avanzadas. Por ejemplo, no es posible saber qué filas se devolverán, ni su orden en ninguna de las siguientes consultas:

select * from table limit 10
select * from table limit 10 offset 10
select * from table order by x limit 10

En la última consulta, el orden solo es predecible si todos los valores en la columna x son únicos. El RDBMS es libre de devolver las filas en el orden que desee, siempre y cuando cumpla con las condiciones de la declaración de selección.

Aunque puede agregar un orden predeterminado en el nivel de Django, lo que hace que agregue una cláusula order by a cada consulta no ordenada:

class Table(models.Model):
    ...
    class Meta:
        ordering = ['name']

Tenga en cuenta que puede ser un lastre para el rendimiento, si por alguna razón no necesita filas ordenadas.