sql >> Database >  >> RDS >> Sqlserver

Willekeurig record uit een databasetabel (T-SQL)

Is er een beknopte manier om een ​​willekeurig record uit een SQL-servertabel op te halen?

Ja

SELECT TOP 1 * FROM table ORDER BY NEWID()

Uitleg

Een NEWID() wordt gegenereerd voor elke rij en de tabel wordt er vervolgens op gesorteerd. Het eerste record wordt geretourneerd (d.w.z. het record met de "laagste" GUID).

Opmerkingen

  1. GUID's worden gegenereerd als pseudo-willekeurige getallen sinds versie vier:

    De versie 4 UUID is bedoeld voor het genereren van UUID's van echt-willekeurige ofpseudo-willekeurige getallen.

    Het algoritme is als volgt:

    • Stel de twee meest significante bits (bits 6 en 7) van theclock_seq_hi_and_reserved in op respectievelijk nul en één.
    • Stel de vier meest significante bits (bits 12 tot en met 15) van het veld time_hi_and_version in op het 4-bits versienummer uit paragraaf 4.1.3.
    • Stel alle andere bits in op willekeurig (of pseudo-willekeurig) gekozen waarden.

    —Een universeel unieke IDentifier (UUID) URN-naamruimte - RFC 4122

  2. Het alternatief SELECT TOP 1 * FROM table ORDER BY RAND() zal niet werken zoals men zou denken. RAND() retourneert één enkele waarde per zoekopdracht, dus alle rijen zullen dezelfde waarde delen.

  3. Hoewel GUID-waarden pseudo-willekeurig zijn, hebt u een betere PRNG nodig voor de meer veeleisende toepassingen.

  4. Typische prestaties zijn minder dan 10 seconden voor ongeveer 1.000.000 rijen - natuurlijk afhankelijk van het systeem. Merk op dat het onmogelijk is om een ​​index te raken, dus de prestaties zullen relatief beperkt zijn.



  1. Hoe commentaar te geven in SQL

  2. Hoe de automatische verhogingswaarde van MySQL / MariaDB-database te wijzigen?

  3. Hoe kan ik een groot (14 GB) MySQL-dumpbestand in een nieuwe MySQL-database importeren?

  4. Verzoek ingesteld in Concurrent Manager