0

テーブルのランダムな行を抽出したい。「ORDER BY RAND」を使用して最初の行を取得すると、別のテーブルが作成されるため時間がかかります。標準的な代替手段は、整数でなければならない一意のプライマリ インデックスに依存することです。

ただし、主キーが均等に分散されていない場合、これは良い結果を返しません。さらに、整数の追加の列を維持する必要があります。

4

2 に答える 2

1

追加の列を追加する必要のない、不均等に分散されたキーを使用してT-SQLでランダムな選択を行いました。これは、次の方法です。

  1. テーブルに有効な行がいくつあるかを確認します(COUNT(...)
  2. 1から行数までの数値をランダム化します
  3. 乱数をインデックスとして使用して行をクエリします
于 2012-10-27T21:12:39.833 に答える
0

主キーが均等に分散されていない場合でも、制限のない範囲クエリによってそれらを確認できます。

SELECT thing FROM table WHERE pk_id > 134 LIMIT 1;

134 のキーを持つ行がなくても、チェーン内の次の行を取得します。このアプローチの良い点は、単純な範囲スキャンであり、非常に効率的であることです。また、テーブル内の行数を知る必要もありません (たとえばSELECT COUNT(*)... を介して)。これは、InnoDB を使用する場合にコストがかかります。InnoDB を使用する必要があります)。最大行IDを実行する必要がありますが、グラブ(SELECT MAX(pk_id) FROM table)するのが効率的であり、キャッシュできます。

于 2012-10-27T22:01:08.517 に答える