またやっちまった orz
あるuserid列を持ったテーブルhogeがあります。行数は15万行ぐらい。
userid外部キーな「貸し出し履歴」テーブル inhist があります。
userid外部キーな「返却履歴」テーブル outhist があります。
ここで、「useridごとの、貸し出し回数と返却履歴を見たい」ということを考えます。
単純にjoinすればいいのですが、なんか深読みして(MySQLのoptimizer?にやられたので)自分で制御してみることにしました。
select hoge.userid, (select count(*) from inhist where inhist.userid=hoge.userid), (select count(*) from outhist where outhist.userid=hoge.userid) from hoge
この副問い合わせの場合に、重要なのはあきらかに inhist,outhistテーブルのuseridにインデックスが貼られていることです。もちろん、貼りました。さっそく実行。(13:00)
.
正直スマンカッタ (16:10)
行数も多いよね…
ちゃんとEXPLAINしないと、だめよねえ(笑) _| ̄|○