テーブルのランダムな行を抽出したい。「ORDER BY RAND」を使用して最初の行を取得すると、別のテーブルが作成されるため時間がかかります。標準的な代替手段は、整数でなければならない一意のプライマリ インデックスに依存することです。
ただし、主キーが均等に分散されていない場合、これは良い結果を返しません。さらに、整数の追加の列を維持する必要があります。
テーブルのランダムな行を抽出したい。「ORDER BY RAND」を使用して最初の行を取得すると、別のテーブルが作成されるため時間がかかります。標準的な代替手段は、整数でなければならない一意のプライマリ インデックスに依存することです。
ただし、主キーが均等に分散されていない場合、これは良い結果を返しません。さらに、整数の追加の列を維持する必要があります。
追加の列を追加する必要のない、不均等に分散されたキーを使用してT-SQLでランダムな選択を行いました。これは、次の方法です。
COUNT(...)
)主キーが均等に分散されていない場合でも、制限のない範囲クエリによってそれらを確認できます。
SELECT thing FROM table WHERE pk_id > 134 LIMIT 1;
134 のキーを持つ行がなくても、チェーン内の次の行を取得します。このアプローチの良い点は、単純な範囲スキャンであり、非常に効率的であることです。また、テーブル内の行数を知る必要もありません (たとえばSELECT COUNT(*)
... を介して)。これは、InnoDB を使用する場合にコストがかかります。InnoDB を使用する必要があります)。最大行IDを実行する必要がありますが、グラブ(SELECT MAX(pk_id) FROM table
)するのが効率的であり、キャッシュできます。