質問させてください。
まずInnoDBでは、
クエリキャッシュは働くのでしょうか。
http://dev.mysql.com/doc/refman/5.1/ja/storage-engine-choosing.html
上記によると使えるようなのですが、
InnoDBはバッファプールがあり、
クエリキャッシュ用に確保している領域とは、
別であると認識しています。
とすると、
InnoDBにてクエリを発行した際の処理順序は、
1.クエリキャッシュ内にあればそこからデータを返却
2.バッファプール内に対象レコードの情報があれば底からデータを返却
3.上記いずれにもない場合はディクス領域のテーブルデータから返却
間違っている部分などありましたら指摘いただきたいです。
よろしくお願いします。
おおよそ合ってるんじゃないですか?
MySQL :: MySQL 5.1 リファレンスマニュアル :: 4.13.1 クエリ キャッシュの動作
クエリキャッシュはその名のとおり、クエリ自体をキャッシュします。
ただし、クエリ自体が一字一句同じ事が前提なので、簡易的なキャッシュと見るほうが正しいでしょう。
対してバッファプールはデータやインデックスの内容自体に対するキャッシュです。
別々のクエリでも同じデータやインデックスにアクセスすることが多ければ有効に使われます。
用途自体が異なるためどちらが良いともいえませんが、適用順序自体は質問文のとおりかと。
更新の際は変更が加わったレコードのデータが、
参照の際は参照したレコードのデータが、
それぞれバッファプールに追加されるという認識でよいのでしょうか。
うーん、間違ってはいないけどそう言い切ってしまうと語弊があるような。
一般にRDBMSのバッファの管理はそれだけで本一冊かけるぐらい複雑だからねぇ。
MySQL :: MySQL 5.1 リファレンスマニュアル :: 13.5.4 InnoDB 起動オプションとシステム変数
少なくとも、InnoDB だけでも、
- innodb_buffer_pool_size
- innodb_max_dirty_pages_pct
の値は影響するし。
間違ってはいないけどそう単純でもない、と言っておこう。
ご回答ありがとうございます。
さらに、
バッファプールに関してですが、
更新の際は変更が加わったレコードのデータが、
参照の際は参照したレコードのデータが、
それぞれバッファプールに追加されるという認識でよいのでしょうか。