sql >> Database >  >> RDS >> Sqlserver

bestellen op newid() - hoe werkt het?

Ik weet wat NewID() doet, ik probeer gewoon te begrijpen hoe het zou helpen bij de willekeurige selectie. Is het dat (1) de select-instructie ALLES uit mijn tabel zal selecteren, (2) voor elke geselecteerde rij een unieke identifier die is gegenereerd door NewID(), (3) de rijen sorteert op deze unieke identifier en (4) de top 100 uit de gesorteerde lijst haalt ?

Ja. dit is vrijwel precies correct (behalve dat het niet per se alles hoeft te sorteren de rijen). U kunt dit verifiëren door naar het daadwerkelijke uitvoeringsplan te kijken.

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

De compute scalaire operator voegt de NEWID() . toe kolom aan voor elke rij (2506 in de tabel in mijn voorbeeldquery), dan worden de rijen in de tabel gesorteerd op deze kolom met de top 100 geselecteerd.

SQL Server hoeft eigenlijk niet de hele set van positie 100 naar beneden te sorteren, dus het gebruikt een TOP N sort-operator die probeert de hele sorteerbewerking in het geheugen uit te voeren (voor kleine waarden van N )



  1. Hoe duplicaten te verwijderen uit een door komma's gescheiden lijst door regexp_replace in Oracle?

  2. Hoe kan ik de tabelstructuur in de SQL Server-query weergeven?

  3. JDBC-verbindingen in pool sluiten

  4. Hoe de serversortering in MySQL te tonen