MySQLのORDER BY RAND()

ビビった。
今まで普通にORDER BY RAND() を使っていたけど、ORDER BY RAND()は一度前件取得してからランダムで1件を取得するためパフォーマンスが悪いらしい。

http://d.hatena.ne.jp/mtomiz/20080125/1201277390

実際、僕の担当しているサービスで、過去にユーザーが入力した検索ワードから、ランダムで1件取得するという機能があるが、
ここで発効していたクエリが超スロークエリになっていた。

対策はこんな感じ

$c = SELECT count(id) FROM table;
// PHPのぶぶbん
$offset = rand(0, $c - 1);
$record = SELECT word FROM table limit 1 offset $offset;

言語じゃないけどこんな感じです