0

いくつかの調査の結果、私のニーズに適したクエリを見つけました。テーブルから ID をランダムに返します。ID フィールドは自動インクリメントなので、穴はありません。

SELECT `mydb`.`myTable`.id
FROM   (SELECT Floor (Rand() * (SELECT Count(*) 
                                FROM   `mydb`.`myTable`)) num, 
               @num := @num + 1 
        FROM   (SELECT @num := 0) a, 
               `mydb`.`myTable` 
        LIMIT  2000000) b, 
       `mydb`.`myTable` 
WHERE  b.num = `mydb`.`myTable`.id

私が経験した問題は、状況に応じて、ターゲット テーブル (myTable) に 30 ~ 400M のレコードが含まれていることです。LIMIT で、ランダムに選択された 2M の ID を取得したいのですが、多くの重複が発生します (これは予想されることです)。

クエリの重複を排除しながら、2M レコードを受け取ることは可能ですか? テーブルを作成して UNIQUE 値を管理できるようにしようと考えましたが、これも予想より少なくなります。

何かご意見は?どうもありがとう!

4

1 に答える 1

1

行をランダムに並べ替えるだけです。重複はなく、穴があるかどうかは問題ではありません。

SELECT 
   id
FROM
  mydb.myTable
ORDER BY
  RAND()
LIMIT 2000000
于 2013-03-11T22:28:32.417 に答える