タイムライン処理と SQL オプティマイザの可能性

re Kazuho@Cybozu Labs: フレンド・タイムライン処理の原理と実践

SQL オプティマイザについての議論としては、たとえば、

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 に応募するネタとしてなんか、いいんじゃないのかな。