MySQLの「 IN (NOT IN) 」を「EXISTS ( NOT EXISTS)」に置き換えた話
2013年4月16日
user_groupとuserてtableがある時に、addressにtokyoが入っているuserがいるgroupは何個あるかなー?って時にINを使って
SELECT COUNT(*) FROM user_group WHERE user_id IN ( SELECT id FROM user WHERE address = 'tokyo' );
なんてやると、index張っても速度が全然でないー。
って時は、EXISTSを使うとサクっと取得できる。
SELECT COUNT(*) FROM user_group AS g WHERE EXISTS ( SELECT u.id FROM user AS u WHERE u.address = 'tokyo' AND g.user_id = u.id );
「NOT EXISTS」もあるので、「NOT IN」とか糞重いので修正できそうなら、修正した方がいいかも。
追記
と思ったけど、件数増やすと結局重いな・・。