対象は feed の entry を本文込みで保存した 100万行ほどのテーブル。PostgreSQL 8.3.7 on x86_64-pc-linux-gnu. まずは単純な方法。 SELECT * FROM entry ORDER BY random() LIMIT 1; 直感的 シンプル しかしシーケンシャルスキャンが起きる $ EXPLAIN ANALYZE SELECT * FROM entry ORDER BY random() LIMIT 1; QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------- Limit (cost=174494.29..1744