クエリキャッシュ

ActiveRecordのjoinsとpreloadとincludesとeager_loadの違い - Qiita

こちらの記事を理解する上で、クエリキャッシュについてもわかっておかないといけないと思った為調べてみることにしました!!

 

クエリキャッシュとは

データベースを参照した結果をメモリにキャッシュしておき、次回同じ参照が行われた時にキャッシュしておいた結果を返す機能です。

最初の参照では普通にSELECT文が実行されますが、2回目からはメモリに保存されているキャッシュしたデータを返すため、結果を速く返すことができます。

データベースの内容が更新された場合(INSERT, UPDATE, DELETEが行われた時)には、キャッシュされた古いデータが返されては困るため、キャッシュしてある内容は削除されます。

※以下のようなやつです。

CACHE (0.0ms) SELECT.......

 

クエリキャッシュのメリット

SELECT文を発行してデータを引っ張らずに済むため、データを速く返すことができます。

同じデータを何回も参照するようなシステムの場合キャッシュを使用することが適しています。

 

クエリキャッシュの注意点

頻繁にデータの更新があるシステムの場合、キャッシュを使用するのはあまり適していないようです。

また、一字一句同じSQLが発行された場合のみキャッシュが有効になります。(引っ張ってくるデータの内容が同じでも、SQL文が違えばキャッシュは使われません)

 

Railsでのクエリキャッシュ

Railsではリクエストによって以前と同じクエリが発生するとデータベースへアクセスする代わりにキャッシュされた結果を利用してくれるようです。

しかし、このRailsでのキャッシュは同じアクションの実行中のみ保持され、アクションが終了すると破棄されてしまうようです。

アクション終了後も保持させたい場合は低レベルキャッシュを使うようです。

railsguides.jp

 

感想その他

キャッシュの概要はわかりましたが、使いこなすのは奥が深そうだと思いました!!

でもパフォーマンスなど気にするなら大事な部分だと思うので、後日上記のRailsガイドのキャッシュの項をまた読み、自分のアプリでも試してみようと思います!!