order by rand()
id:naoyaさんが書いている
インデックスをかけてるテーブルでも、結局ランダムなので全件捜査してから値を返す。プライマリーキーに対して rand() する場合でも O(1) ではないのですよね。なんか回避する方法があったりするのかな
order by rand()は最近知った方です。
通常ランダムで返す必要がある場合データベースではなくプログラム側で、2度SQLを発行してます。
my ($count) = $dbh->selectrow_array('select count(*) from table'); my $offset = int rand $count; my $ret = $dbh->selectrow_hashref('select * from table limit ?,1',{},$offset);
これで対応してました。
やっていることは、id:jazzanovaさんと同じような感じ。
速いのかどうかはちょっとわかりません。