Railsアプリの統計部分に、モデルコードからActiveRecord :: Base.execute()で呼び出されるカスタムSQL呼び出しがいくつかあります。さまざまな集計を返します。
これらの(同一の)クエリの一部はコントローラー内でループで実行され、ActiveRecordクエリキャッシュによってキャッシュされていないようです。
単一のリクエスト内でカスタムSQLクエリをキャッシュする方法はありますか?
Railsアプリの統計部分に、モデルコードからActiveRecord :: Base.execute()で呼び出されるカスタムSQL呼び出しがいくつかあります。さまざまな集計を返します。
これらの(同一の)クエリの一部はコントローラー内でループで実行され、ActiveRecordクエリキャッシュによってキャッシュされていないようです。
単一のリクエスト内でカスタムSQLクエリをキャッシュする方法はありますか?
ARが#executeのクエリキャッシュをサポートしているかどうかわからない場合は、ドキュメントを詳しく調べてください。とにかく、あなたができることは、メモ化を使用することです。これは、現在のリクエストが終了するまで結果を手動で保持することを意味します。
モデルで次のようなことを行います。
def repeating_method_with_execute
@rs ||= ActiveRecord::Base.execute(...)
end
@rs
これにより、基本的に最初にのみクエリが実行され、リクエスト全体が終了するまで応答が保存されます。
私が間違っていなければ、Rails 2.xには、memoization
ActiveRecordで名前が付けられたマクロがすでにあり、それがすべて自動的に実行されます。
それが役に立てば幸い