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;
言語じゃないけどこんな感じです