「データベースレベルでより多くの作業を行うと、パフォーマンスが向上します」
はい、そうなります。非常に基本的なレールのもの、つまり
@thing = Thing.find(id)
非常に効率的で、通常、これらの場合のパフォーマンスは気にしません。
しかし、ある種のフィルターはどうですか。
特定の文字セットを含む名前を検索する機能を実装したいとします (これは説明のための不自然な例です)。
あなたはこれを行うことができます:
@things = Thing.all
@foothings = []
@things.each do |thing|
if /foo/ =~ thing.name
@foothings << thing
end
end
または、次のようにすることもできます。
class Thing < ActiveRecord::Base
def self.filtered(what)
self.where("name like ?","%#{what}%")
end
end
@foothings = Thing.filtered("foo")
データベースは、はるかに高速に検索を実行します (2 番目の例)。これは高度に調整および最適化された C コード (おそらく) であり、RoR は依然としてインタープリター言語です。また、最初の例では、データベースからすべてのものが要求されます。2 番目の例では、名前に「foo」を含むもののみが返されます。RoR マシンとデータベース マシンの間にネットワーク遅延がある場合は、パフォーマンスにも影響する可能性があります。