InnoDBストレージエンジンとは
2026/08/08

InnoDBは、MySQLの標準ストレージエンジンです。テーブルのデータとインデックスをディスク上にどう並べ、メモリ上でどうキャッシュし、複数の接続が同時に読み書きしても矛盾が起きないようにどう制御するか、といったデータの保存と読み書きそのものを担います。SQLを書くだけなら意識せずに使えますが、性能や挙動の理由を突き詰めると、必ずこの内部構造に行き着きます。

InnoDBが引き受けていること

アプリケーションがSQLでテーブルを操作するとき、その裏でInnoDBはいくつもの仕事を同時にこなしています。行を主キー順に並べたB-treeインデックスとしてディスク上のページに格納し、よくアクセスされるページをメモリ上のバッファプールにキャッシュします。更新はまずメモリ上で行い、その内容をredoログに追記してから、実際のデータページはあとでまとめてディスクへ書き出します。ある行を複数の接続が同時に読み書きしても、それぞれが一貫したデータを見られるように、古いバージョンをundoログに残しておきます。

これらは互いに独立した機能ではなく、「ディスクI/Oはできるだけ減らす」「クラッシュしてもコミット済みの変更は失わない」「読み取りと書き込みを待たせ合わない」という共通の目的に向かって噛み合っています。

この分野で出てくる基本の単位

InnoDBの内部を読み解くとき、繰り返し出てくる基礎的な用語があります。ここでは、全体の前提になる語だけ簡単に触れておきます。

ページは、InnoDBがディスクとメモリのあいだでデータをやり取りする最小単位で、既定では16KBです。行1件を読みたいときも、その行が載っているページごと16KBを読み込みます。トランザクションは、まとめて成功か失敗かが決まる一連の操作で、途中で失敗すれば変更はすべてなかったことにされます。LSN(Log Sequence Number)は、変更の順序を表す通し番号で、ログやリカバリの基準になります。

公式リソース