Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Losowy rekord z tabeli bazy danych (T-SQL)

Czy istnieje zwięzły sposób na pobranie losowego rekordu z tabeli serwera sql?

Tak

SELECT TOP 1 * FROM table ORDER BY NEWID()

Wyjaśnienie

NEWID() jest generowany dla każdego wiersza, a tabela jest następnie według niego sortowana. Zwracany jest pierwszy rekord (tj. rekord z „najniższym” identyfikatorem GUID).

Notatki

  1. Identyfikatory GUID są generowane jako liczby pseudolosowe od wersji czwartej:

    UUID w wersji 4 jest przeznaczony do generowania identyfikatorów UUID z liczb prawdziwie losowych lub pseudolosowych.

    Algorytm wygląda następująco:

    • Ustaw dwa najbardziej znaczące bity (bity 6 i 7) zegara_seq_hi_and_reserved odpowiednio na zero i jeden.
    • Ustaw cztery najbardziej znaczące bity (bity od 12 do 15) pola time_hi_and_version na 4-bitowy numer wersji z rozdziału 4.1.3.
    • Ustaw wszystkie pozostałe bity na losowo (lub pseudolosowo) wybrane wartości.

    — Przestrzeń nazw URN Universally Unique IDentifier (UUID) — RFC 4122

  2. Alternatywa SELECT TOP 1 * FROM table ORDER BY RAND() nie będzie działać tak, jak mogłoby się wydawać. RAND() zwraca jedną wartość na zapytanie, dzięki czemu wszystkie wiersze będą miały tę samą wartość.

  3. Chociaż wartości GUID są pseudolosowe, będziesz potrzebować lepszego PRNG dla bardziej wymagających aplikacji.

  4. Typowa wydajność to mniej niż 10 sekund dla około 1 000 000 wierszy — oczywiście w zależności od systemu. Pamiętaj, że niemożliwe jest trafienie w indeks, dlatego wydajność będzie stosunkowo ograniczona.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Query wolno w aplikacji .NET, ale natychmiastowo w SQL Server Management Studio

  2. Odpowiednik C# typów danych SQL Server

  3. Wstaw aktualizację wyzwalacza, jak określić, czy wstawiasz lub aktualizujesz

  4. Czy istnieją zagrożenia bezpieczeństwa związane z monitorowaniem w chmurze Spotlight?

  5. Jak wyłączyć wszystkie wyzwalacze w bazie danych SQL Server