データベースに大きなテーブル (潜在的に数百万のレコード) があり、 #X ランダムな行 (10 から 50 の間の #X としましょう) を選択する必要がありますが、このクエリを可能な限り最適にする必要があります。
テーブルは次のようになります。
CREATE TABLE sample (
id bigint auto_increment PRIMARY KEY,
user_id bigint NOT NULL,
screen_name VARCHAR NOT NULL,
...
);
私は周りを検索しましたが、次のような答えを見つけました:
SELECT * FROM sample ORDER BY RAND() limit X.
しかし、これはテーブル全体を取得してからソートするように見えますね。
10 個または 50 個のランダムな整数を生成してselect * from sample where rowid in (<random integer list>)
. しかし、私の知る限り、H2 には行 ID の概念がないため、テーブルで ID 列を使用することを選択できます。
このタスクを 1 つの SQL クエリで実行できれば素晴らしいと思います。
より良いアドバイスはありますか?