今、私が言うならば、私は多くのヒットを持っているキャンペーンと呼ばれるテーブルを持っています:
Campaign.find(30).hits
これには4秒、つまり4213ミリ秒かかります。
代わりにこれを呼び出す場合:
キャンペーン=Campaign.find(30) キャンペーン.hits.count
それでもすべてのヒットをロードしてからカウントしますか?それとも、私がカウントしていることを確認し、すべてのヒットをロードしないようにしますか?(現在300,000行以上です)。
ヒットをロード/カウントするスマートな方法を見つけようとしています。Campaign.rbモデルに次のようなメソッドを追加することを考えています。
def self.total_hits find:first、:select =>'COUNT(id)as hits'、:conditions => ["campaign_id =?"、self.id] 終わり
クエリがテーブルから読み込まれないことは知っていますがhits
、これは、Ruby on Railsがこれを実行するのとは対照的に、自作のクエリからクエリをカウントする例にすぎません。
このmemcacheクエリはより効率的でしょうか?(私はそれを実行していますが、同じ速度で、より良い/より速い/より遅いようには見えません。)
def self.hits Rails.cache.fetch( "Campaign_Hits _#{self.campaign_id}"、:expires_in => 40){ find(:first、:select =>'COUNT(id)as hits'、:conditions => ["campaign_id =?"、self.campaign_id])。hits } 終わり
どんな提案も素晴らしいでしょう!