SQL キャッシュ
クエリキャッシュとはクエリによって返されるリザルトをキャッシュする機能。リクエストによって以前と同じクエリが発生した場合に、データベースへのクエリを実行する代わりにキャッシュされたリザルトを利用する。
データベースに対して同じクエリが2回実行されると、2回目はデータベースへのアクセスがスキップされる。1回目のクエリでクエリのリザルトをメモリ上のクエリキャッシュに保存し、2回目のクエリではメモリからリザルトを読み出す。
クエリキャッシュはアクション開始時に作成され、アクションの終了時に破棄される。キャッシュはアクションの実行中にのみ保持される。キャッシュを持続させたい場合は低レベルキャッシュを使う必要がある。
参考:
意識しないとまずい? ActiveRecord SQL キャッシュの罠 | DoRuby
Rails のクエリキャッシュの仕組みを調べた | takatoshiono’s blog
Active Record のキャッシュについて | YOSHINO 日記
SQL キャッシュを一時的に無効にする
User.uncached do User.where(active: true).count end
参考:
ActiveRecord のキャッシュをオフにする | happy lie, happy life
ActiveRecord のクエリキャッシュを使わずクエリを発行する – Rails でアレってどうやるんだっけ? – Qiita
Disable SQL Cache temporary in Rails? – Stack Overflow
Avoiding Caching with Rails ActiveRecord | Adam N England
クエリを再実行する (reload)
参考:
Rails で ActiveRecord がキャッシュされてしまう – teratail
cache_key
参考:
cache_key による結果セットとコレクションのキャッシュ機能 翻訳 | TechRacho
関連モデルのキャッシュ
参考:
How to clear ActiveRecord query cache on associations with dynamic table – Ruby Forum
Redis を使ってクエリをキャッシュする
参考:
Rails でクエリ結果をキャッシュして DB 負荷を軽減する – Qiita
How to cache sql queries, the result of which never change? – Stack Overflow
キャッシュとメモ化
参考:
Memoization, Caching and SQL query optimization in Ruby on Rails | EquiValent
Memoization & caching in Ruby & Ruby on Rails – Stack Overflow
clear_all_connections!
参考:
How can I force the rails SQL cache to clear? – Stack Overflow
select_all
参考:
select_all – rails/query_cache.rb at v6.0.0.rc1 · rails/rails – GitHub