佐々木です。
 
小宮様ご回答ありがとうございます。
>すべての企業と、企業に属する 30 歳以上の社員ということであれば
>以下のようなコードになると思います。
>
>companies = Company.find(:all)
>companies.each do |company|
>users = company.users.find(:all, :conditions => ['old >= ?', 30])
>end
上記の方法だと企業数分SQLが追加発行されますので、以下のincludeを使った方法に比べ格段にパフォーマンスが落ちてしまいます。
companies = Company.find(:all, :conditions => ['users.old >= ?', 30],
                                    :include => :users)
 
試しに企業数 5,  社員300程度で測定したところDBアクセスが 3倍遅くなりました。
 
社員に30歳以上いることが保障されていれば、includeで特に問題ないので
どうにかincludeを使いつつ高速に且つ簡単に実現できないかと悩んでおります。
 
またjoinを使えば出来ますが、joinを使うとRailsの良さが消えるので出来ればあまり使いたくないと思っています。
 


[10th Anniversary] Check Out the Special Final Sale