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

Tilfældig registrering fra en databasetabel (T-SQL)

Er der en kortfattet måde at hente en tilfældig post fra en sql-servertabel?

Ja

SELECT TOP 1 * FROM table ORDER BY NEWID()

Forklaring

En NEWID() genereres for hver række, og tabellen sorteres derefter efter den. Den første post returneres (dvs. posten med den "laveste" GUID).

Bemærkninger

  1. GUID'er er genereret som pseudo-tilfældige tal siden version fire:

    Version 4 UUID er beregnet til at generere UUID'er fra virkelig tilfældige eller pseudo-tilfældige tal.

    Algoritmen er som følger:

    • Indstil de to mest signifikante bits (bit 6 og 7) af theclock_seq_hi_and_reserved til henholdsvis nul og én.
    • Indstil de fire mest signifikante bits (bit 12 til 15) i feltet time_hi_and_version til 4-bit versionsnummeret fra afsnit 4.1.3.
    • Indstil alle de andre bits til tilfældigt (eller pseudo-tilfældigt) valgte værdier.

    —A Universally Unique IDentifier (UUID) URN-navneområde - RFC 4122

  2. Alternativet SELECT TOP 1 * FROM table ORDER BY RAND() vil ikke fungere som man skulle tro. RAND() returnerer én enkelt værdi pr. forespørgsel, så alle rækker deler den samme værdi.

  3. Selvom GUID-værdier er pseudo-tilfældige, har du brug for en bedre PRNG til de mere krævende applikationer.

  4. Typisk ydeevne er mindre end 10 sekunder for omkring 1.000.000 rækker - selvfølgelig afhængigt af systemet. Bemærk, at det er umuligt at ramme et indeks, så ydeevnen vil være relativt begrænset.



  1. PostgreSQL Opret indeks

  2. Brug af tråde til at lave databaseanmodninger

  3. Returner alle fremmednøgler &CHECK-begrænsninger i en SQL Server-database (T-SQL-eksempler)

  4. Afmystificere CXPACKET og CXCONSUMER ventetyper i SQL Server