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
-
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
-
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. -
Zatímco hodnoty GUID jsou pseudonáhodné, pro náročnější aplikace budete potřebovat lepší PRNG.
-
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ý.