要らない物は持ってこない。

Fooモデルがid, title, bodyを持っているとする。idだけ使いたいときに、

foo=Foo.find(:all)

とすると、idしか使わないんだけどtitleとbodyもおまけで付いてくる。メモリとかもったいないので、

foo=Foo.find_by_sql("select id from foos")

とfind_by_sqlで直接SQLを書いてやるとidのみ持ってくる。ただしこの方法だとSQLを直書きする羽目になるわけで、せっかくのActiveRecordなのに、と少し嫌な感じ。なんかいい方法無いかな。あったような気もするんだけど見つからない。
また、条件に合致したレコードを全部消したい場合、

#2時間以上前に作られたfooを消す
Foo.find(:all, :conditions => ["created_at<?", Time.now-2*3600]).each{|foo|
  foo.destroy
}

とやるとレコードごとにdelete from~が走るわ最初に全部findされるわで無駄、遅いので、

ActiveRecord::Base.connection.execute("delete from foos where created_at <#{Time.now-2*3600}")

とするとクエリ一発で消えてくれる。ただし例によってSQL直接記述だからなんだかなあ。