タイムライン取得処理 (プル型) をがんばって1ステートメントで書いてみる話
Kazuho@Cybozu Labs: フレンド・タイムライン処理の原理と実践
http://tt25.org/blog/20080609/sql-friend-timeline
tt25 さんに触発されて MySQL で 2 * n2 行のアクセスで (たぶん) 動くコードを書いてみた、けど、ストアドプロシージャを使うコードと速度は変わらなかったorz
SELECT message.id,message.user_id,message.body FROM message INNER JOIN ( SELECT t.follower_id,t.max_id,IFNULL( ( SELECT id FROM message WHERE user_id=t.follower_id ORDER BY user_id DESC,id DESC LIMIT 20,1 ), 0 ) AS low_id FROM ( SELECT follower_id,( SELECT id FROM message WHERE user_id=follower.follower_id ORDER BY user_id DESC,id DESC LIMIT 1) AS max_id FROM follower WHERE user_id=? ORDER BY max_id DESC LIMIT 20 ) as t ) as t2 WHERE user_id=follower_id AND low_id<=id ORDER BY id DESC LIMIT 20
ストアドプロシージャの並走性ってどうなんだっけ? ロックがかかるのはトリガーだけ?