sql >> データベース >  >> RDS >> Sqlserver

データベーステーブルからのランダムレコード(T-SQL)

    SQLサーバーテーブルからランダムレコードを取得する簡潔な方法はありますか?

    はい

    SELECT TOP 1 * FROM table ORDER BY NEWID()
    

    説明

    NEWID() 行ごとにが生成され、テーブルはそれによってソートされます。最初のレコードが返されます(つまり、「最も低い」GUIDを持つレコード)。

    メモ

    1. バージョン4以降、GUIDは疑似乱数として生成されます:

      バージョン4のUUIDは、真にランダムなまたは疑似ランダムな数値からUUIDを生成するためのものです。

      アルゴリズムは次のとおりです。

      • clock_seq_hi_and_reservedの最上位2ビット(ビット6と7)をそれぞれ0と1に設定します。
      • time_hi_and_versionフィールドの最上位4ビット(ビット12〜15)をセクション4.1.3の4ビットバージョン番号に設定します。
      • 他のすべてのビットをランダムに(または疑似ランダムに)選択された値に設定します。

      -Universally Unique IDentifier(UUID)URN名前空間-RFC 4122

    2. 代替のSELECT TOP 1 * FROM table ORDER BY RAND() 思ったようには機能しません。 RAND() クエリごとに1つの値を返すため、すべての行が同じ値を共有します。

    3. GUID値は疑似ランダムですが、より要求の厳しいアプリケーションには、より優れたPRNGが必要になります。

    4. 通常のパフォーマンスは、約1,000,000行で10秒未満です。もちろん、システムによって異なります。インデックスをヒットすることは不可能であるため、パフォーマンスは比較的制限されることに注意してください。



    1. MariaDBで利用可能な文字セットを取得する2つの方法

    2. SQLServerでのデータベーススキーマの使用

    3. OracleでPLSQLを使用してPDFファイルを作成する

    4. テーブルから上位N行を選択します