Jeg ved, hvad NewID() gør, jeg prøver bare at forstå, hvordan det ville hjælpe i det tilfældige valg. Er det, at(1) select-sætningen vil vælge ALT fra mytabel, (2) for hver valgt række, tack på en unik identifikator genereret af NewID(),(3) sortere rækkerne efter denne unikke identifikator og (4) vælge top 100 fra den sorterede liste ?
Ja. dette er stort set nøjagtigt korrekt (bortset fra at det ikke nødvendigvis behøver at sortere alt rækkerne). Du kan verificere dette ved at se på den faktiske udførelsesplan.
SELECT TOP 100 *
FROM master..spt_values
ORDER BY NEWID()
Beregningsskalaroperatoren tilføjer NEWID()
kolonne på for hver række (2506 i tabellen i mit eksempelforespørgsel), så sorteres rækkerne i tabellen efter denne kolonne med top 100 valgt.
SQL Server behøver faktisk ikke at sortere hele sættet fra position 100 ned, så den bruger en TOP N
sorteringsoperator, som forsøger at udføre hele sorteringsoperationen i hukommelsen (for små værdier af N
)