in (?)を使わないでなんとかする
私はSQL脳じゃなくてRails脳なので、
in (?)なんぞを使わないでなんとかしたくなる。
んで、オレだったらこうするよなぁってヤツを公開。
元のクエリ
User.find(:all,:include=>[:user_schedules],:conditions=>["user_schedules.schedule_id in (?)",@event.schedule_ids])
なげーよ。でも、処理は速そうだな。
@event.schedules.inject([]){|result,schedule|result+schedule.users}.uniq
短いけど、遅そうだな。
ベンチマークをとってみよう。
fujioka@macbook:~/rails/adjuster% ./script/performance/benchmarker 1000 'User.find(:all,:include=>[:user_schedules,:schedules],:conditions=>["user_schedules.schedule_id in (?)",Event.find(:first).schedule_ids])' user system total real #1 3.350000 0.130000 3.480000 ( 4.754344)
fujioka@macbook:~/rails/adjuster% ./script/performance/benchmarker 1000 'Event.find(:first).schedules.inject([]){|result,schedule|result+schedule.users}.uniq' user system total real #1 1.510000 0.140000 1.650000 ( 2.492594)
あれ???うーむ。
1000回とかやってもRailsがキャッシュしてしまうとか?