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
)