ランダムにN個のレコードをとってくるSQL

あるテーブルからランダムにN個のレコードをとってくるには、次のようにする。

mysql> SELECT *, rand() randval FROM employees ORDER BY randval LIMIT 3;

ポイントは、

  • ランダムな値を持つ列を仮想的に追加し、
  • それをソートして上位N件だけを取り出す。

ということ。
なるほどねー。

でもこれってインデックスを使わないソートだよね。効率はあんまりよくなさげ。といってもほかの方法があるわけでもないし。