sql >> Databasteknik >  >> RDS >> PostgreSQL

Vilken är standardordningen för en lista som returneras från ett Django-filteranrop?

Det finns INGEN STANDARDORDNING , en punkt som inte kan betonas tillräckligt eftersom alla gör det fel.

En tabell i en databas är inte en vanlig html-tabell, det är en oordnad uppsättning tupler. Det överraskar ofta programmerare som bara är vana vid MySQL eftersom ordningen på raderna i just den databasen ofta är förutsägbar på grund av att den inte drar fördel av vissa avancerade optimeringstekniker. Det är till exempel inte möjligt att veta vilka rader som kommer att returneras, eller deras ordning i någon av följande frågor:

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

I den sista frågan är ordningen endast förutsägbar om alla värden i kolumn x är unika. RDBMS är fri att returnera alla rader i vilken ordning som helst så länge den uppfyller villkoren för select-satsen.

Även om du kan lägga till en standardordning på Django-nivån, vilket gör att den lägger till en order by-klausul till varje icke-ordnad fråga:

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

Observera att det kan vara en prestandadrag, om du av någon anledning inte behöver ordnade rader.



  1. Spring Batch - Det går inte att skapa metadatatabeller på Postgres och ladda faktiska data till mysql

  2. LEAST() Funktion i Oracle

  3. Postgres analog till CROSS APPLY i SQL Server

  4. Logcat säger ogiltig kolumndata1