sql >> Databáze >  >> RDS >> Sqlserver

Náhodný záznam z databázové tabulky (T-SQL)

Existuje stručný způsob, jak získat náhodný záznam z tabulky serveru SQL?

Ano

SELECT TOP 1 * FROM table ORDER BY NEWID()

Vysvětlení

A NEWID() se vygeneruje pro každý řádek a podle něj se pak seřadí tabulka. Je vrácen první záznam (tj. záznam s „nejnižším“ GUID).

Poznámky

  1. GUID jsou od verze čtyři generovány jako pseudonáhodná čísla:

    Verze 4 UUID je určena pro generování UUID ze skutečně náhodných orpseudonáhodných čísel.

    Algoritmus je následující:

    • Nastavte dva nejvýznamnější bity (bity 6 a 7) theclock_seq_hi_and_reserved na nulu a jedna.
    • Nastavte čtyři nejvýznamnější bity (bity 12 až 15) pole time_hi_and_version na 4bitové číslo verze z části 4.1.3.
    • Nastavte všechny ostatní bity na náhodně (nebo pseudonáhodně) zvolené hodnoty.

    —URN Namespace Universally Unique IDentifier (UUID) – RFC 4122

  2. Alternativa SELECT TOP 1 * FROM table ORDER BY RAND() nebude fungovat, jak by si někdo myslel. RAND() vrátí jednu hodnotu na dotaz, takže všechny řádky budou sdílet stejnou hodnotu.

  3. Zatímco hodnoty GUID jsou pseudonáhodné, pro náročnější aplikace budete potřebovat lepší PRNG.

  4. Typický výkon je méně než 10 sekund pro přibližně 1 000 000 řádků – samozřejmě v závislosti na systému. Všimněte si, že není možné zasáhnout index, takže výkon bude relativně omezený.



  1. TIME_TO_SEC() Příklady – MySQL

  2. Nechte uživatele MySQL vytvářet databáze, ale povolte přístup pouze k jejich vlastním databázím

  3. Funkce SUM() na serveru SQL Server

  4. SQL Server String nebo binární data by byla zkrácena