SELECT quote FROM quotes ORDER BY RAND() LIMIT 1
テーブルからランダムの行を手に入れる為のSQL文だが、これはとても悪いアイデアだ。貴方が欲しいものがどんなものであれ、巨大なテーブルを持っていて、たった50-100行を取り出すであったとしてもね。
貴方がこのクエリーを走らせるたびにどんなことが起きているのだろう? 10000行を持つテーブルの上で、このクエリーを走らせてみよう。すると、SQLは10000の乱数を発行し、一番小さい数を調べて、その行を与える。乱数を作ることは、比較的には大変な操作であり、それらの一番小さな数をを見つけてくること自体はとてもはやい(例えば、貴方が LIMIT 10にしていたら、それらで小さい順に10個の数を取ってくるーーもし、このテキストの引用が遅いなら、それはたぶんできるだけ早くするためにサイズを何らかの形であわせているからだ。たぶん、テンポラリーテーブルを作る必要があるから、とか)。
で、どうやってこんなオーバーヘッドを起こさずに、ランダムな行を取ってくればいいんだろう?簡単に置き換えることはそう簡単ではない。次のようなことは、できる。
SELECT COUNT(*) AS cnt FROM quotes