sql >> Databasteknik >  >> RDS >> Sqlserver

order by newid() - hur fungerar det?

Jag vet vad NewID() gör, jag försöker bara förstå hur det skulle hjälpa i det slumpmässiga urvalet. Är det så att(1) select-satsen kommer att välja ALLT från mytable, (2) för varje vald rad, tacka på en unik identifierare genererad av NewID(),(3) sortera raderna efter denna unika identifierare och (4) välja bort de 100 bästa från den sorterade listan ?

Ja. detta är ganska exakt korrekt (förutom att det inte nödvändigtvis behöver sortera alla raderna). Du kan verifiera detta genom att titta på den faktiska genomförandeplanen.

SELECT TOP 100 * 
FROM master..spt_values 
ORDER BY NEWID()

Beräkningsskaläroperatorn lägger till NEWID() kolumn på för varje rad (2506 i tabellen i min exempelfråga) så sorteras raderna i tabellen efter denna kolumn med de 100 översta valda.

SQL Server behöver faktiskt inte sortera hela uppsättningen från position 100 nedåt så den använder en TOP N sorteringsoperator som försöker utföra hela sorteringsoperationen i minnet (för små värden på N )



  1. PHP &mySQL:År 2038 Bug:Vad är det? Hur löser man det?

  2. Hur Asinh() fungerar i PostgreSQL

  3. SQL rader till kolumner

  4. "Dödligt fel på intern anslutning" vid exekvering av en inbyggt kompilerad lagrad procedur i SQL Server 2019 (känd bugg)