sql >> Database teknologi >  >> RDS >> Sqlserver

bestil efter newid() - hvordan virker det?

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 )



  1. Docker venter på, at postgresql kører

  2. Sådan installeres MySQL 8 på Ubuntu 20.04 LTS

  3. Sådan opnår du PCI-overensstemmelse for MySQL &MariaDB med ClusterControl - The Replay

  4. Identifikation og reparation af fremsendte posters ydeevneproblem