sql >> Databasteknik >  >> RDS >> Sqlserver

Beräknar SQL Server ROW_NUMBER() OVER() för en härledd tabell

Row_Number() OVER (ORDER BY (SELECT 1)) trick ska INTE ses som ett sätt att undvika att ändra ordningen på underliggande data. Det är bara ett sätt att undvika att få servern att utföra en extra och onödig sortering (den kan fortfarande utföra sorteringen men det kommer att kosta minsta möjliga summa jämfört med att sortera efter en kolumn).

Alla frågor i SQL-servern MÅSTE ABSOLUT har en ORDER BY klausul i den yttersta frågan för att resultaten ska ordnas tillförlitligt på ett garanterat sätt.

Konceptet att "behålla ursprunglig ordning" finns inte i relationsdatabaser. Tabeller och frågor måste alltid betraktas som oordnade tills och om inte en ORDER BY sats anges i den yttersta frågan.

Du kan prova samma oordnade fråga 100 000 gånger och alltid få den med samma beställning, och därmed komma att tro att du kan lita på nämnda beställning. Men det skulle vara ett misstag, för en dag kommer något att förändras och det kommer inte att få den ordning du förväntar dig. Ett exempel är när en databas uppgraderas till en ny version av SQL Server - detta har fått många frågor att ändra sin ordning. Men det behöver inte vara så stor förändring. Något så lite som att lägga till eller ta bort ett index kan orsaka skillnader. Och mer:Installera ett Service Pack. Dela upp ett bord. Skapa en indexerad vy som inkluderar tabellen i fråga. Att nå en vändpunkt där en skanning väljs istället för en sökning. Och så vidare.

Lita inte på att resultat ska beställas om du inte har sagt "Server, ORDER BY ".




  1. Delad primärnyckel

  2. MySQL DECIMAL datatyp

  3. Hur använder man ett funktionsbaserat index på en kolumn som innehåller NULL i Oracle 10+?

  4. Generera skript för både schema och data