sql >> Base de Datos >  >> RDS >> Sqlserver

ordenar por newid() - ¿cómo funciona?

Sé lo que hace NewID(), solo estoy tratando de entender cómo ayudaría en la selección aleatoria. ¿Es que (1) la declaración de selección seleccionará TODO de mi tabla, (2) para cada fila seleccionada, agregará un identificador único generado por NewID (), (3) ordenará las filas por este identificador único y (4) seleccionará los 100 principales de la lista ordenada ?

Sí. esto es casi exactamente correcto (excepto que no necesariamente necesita ordenar todo las filas). Puede verificar esto observando el plan de ejecución real.

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

El operador escalar de cómputo agrega el NEWID() columna activada para cada fila (2506 en la tabla en mi consulta de ejemplo), luego las filas de la tabla se ordenan por esta columna con las 100 principales seleccionadas.

SQL Server en realidad no necesita ordenar todo el conjunto desde las posiciones 100 hacia abajo, por lo que usa un TOP N operador de clasificación que intenta realizar toda la operación de clasificación en la memoria (para valores pequeños de N )