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

Registro aleatorio de una tabla de base de datos (T-SQL)

¿Existe una forma sucinta de recuperar un registro aleatorio de una tabla de servidor sql?

SELECT TOP 1 * FROM table ORDER BY NEWID()

Explicación

Un NEWID() se genera para cada fila y luego la tabla se ordena por ella. Se devuelve el primer registro (es decir, el registro con el GUID "más bajo").

Notas

  1. Los GUID se generan como números pseudoaleatorios desde la versión cuatro:

    El UUID de la versión 4 está diseñado para generar UUID a partir de números verdaderamente aleatorios o pseudoaleatorios.

    El algoritmo es el siguiente:

    • Establezca los dos bits más significativos (bits 6 y 7) de theclock_seq_hi_and_reserved a cero y uno, respectivamente.
    • Establezca los cuatro bits más significativos (bits 12 a 15) del campo time_hi_and_version al número de versión de 4 bits de la Sección 4.1.3.
    • Establezca todos los demás bits en valores elegidos aleatoriamente (o pseudoaleatoriamente).

    —Un espacio de nombres URN de identificador único universal (UUID) - RFC 4122

  2. La alternativa SELECT TOP 1 * FROM table ORDER BY RAND() no funcionará como uno pensaría. RAND() devuelve un único valor por consulta, por lo que todas las filas compartirán el mismo valor.

  3. Si bien los valores de GUID son pseudoaleatorios, necesitará un PRNG mejor para las aplicaciones más exigentes.

  4. El rendimiento típico es de menos de 10 segundos para alrededor de 1 000 000 de filas, por supuesto, dependiendo del sistema. Tenga en cuenta que es imposible alcanzar un índice, por lo que el rendimiento será relativamente limitado.