インデックスをかけてるテーブルでも、結局ランダムなので全件捜査してから値を返す。プライマリーキーに対して rand() する場合でも O(1) ではないのですよね。なんか回避する方法があったりするのかな。 自分は良くorder by rand()を使ってます。 んで、id:naoya氏も懸念してるようにテーブルサイズが増大した時の動作とかその辺がorder by rand()だときついです。 追記 下記の方法はidに欠番があったりすると使い物になりません。 idに欠番がなく、idに数値を使ってる場合のみ有効です。悪しからず。 なので自分の場合は set @id = floor(rand()*n)+1; select id from entry where id = @id; ってな感じでやってます。 純粋にorder by rand()を使うより体感的にかなり高速だと思うけどどれくらい早く