タイムライン処理と SQL オプティマイザの可能性
re Kazuho@Cybozu Labs: フレンド・タイムライン処理の原理と実践
SELECT * FROM message INNER JOIN follower ON message.user_id=follower.follower_id WHERE user_id=2 ORDER BY message.id DESC LIMIT 20;
みたいなケースで、LIMIT がついていて、かつ、message テーブルの参照に使われるインデックスが ORDER BY にも使用可能な場合に、
- loose index scan を行う (各 user_id について message テーブルを 20 行しかアクセスしない)
- loose index scan の結果を全マージしてからソート、ではなく、各行毎に挿入 or 読み捨てを行う
といった最適化を実装したいよね、って話になるんだろうなぁ。
Google Summer of Code に応募するネタとしてなんか、いいんじゃないのかな。