InnoDB
テーブルは、次の理由で役立ちます:
ハードウェアまたはソフトウェアの問題が原因でサーバーが予期せず終了した場合は、その時点でデータベースで何が起こっていたかに関係なく、データベースの再起動後に特別な操作を行う必要はありません。
InnoDB
のクラッシュリカバリを使用すると自動的に、クラッシュ時の前にコミットされた変更はすべて完了し、処理中だったがコミットされなかった変更はすべて取り消されます。 単に再起動し、終了した場所から続行するだけです。InnoDB
ストレージエンジンは、データがアクセスされたときにテーブルおよびインデックスデータをメインメモリーにキャッシュする独自の buffer pool を保持します。 頻繁に使用されるデータは、直接メモリーから処理されます。 このキャッシュは多くのタイプの情報に適用され、処理が高速化されます。 専用データベースサーバーでは、多くの場合、最大 80% の物理メモリーがバッファプールに割り当てられます。関連データをさまざまなテーブルに分割すると、強制的に参照整合性が適用される外部キーを設定できます。 データを更新または削除すると、ほかのテーブル内の関連データも自動的に更新または削除されます。 プライマリテーブル内に対応するデータが存在しないセカンダリテーブルにデータを挿入しようとすると、自動的に不正なデータが除外されます。
ディスク上またはメモリー内のデータが破損した場合は、偽のデータを使用する前に、チェックサムメカニズムによって警告が発行されます。
テーブルごとに適切な主キーカラムを持つデータベースを設計すると、これらのカラムが関与する操作が自動的に最適化されます。
WHERE
句、ORDER BY
句、GROUP BY
句、および結合操作では、主キーカラムへの参照が非常に高速です。挿入、更新および削除は、change buffering と呼ばれる自動メカニズムによって最適化されます。
InnoDB
では、同じテーブルへの並列読み取りおよび書き込みアクセスが許可されているだけでなく、ディスク I/O が効率化されるように変更されたデータがキャッシュに入れられます。パフォーマンスの利点は、長時間実行されるクエリーを含む巨大なテーブルだけに限定されません。 同じ行が 1 つのテーブルから何度もアクセスされると、適応型ハッシュインデックスと呼ばれる機能に引き継がれ、ハッシュテーブルから読み取られたかのように、これらの検索がさらに高速になります。
テーブルおよび関連付けられたインデックスを圧縮できます。
パフォーマンスおよび可用性への影響を大幅に少なくして、インデックスを作成および削除できます。
file-per-table テーブルスペースの切捨ては非常に高速で、
InnoDB
のみが再利用できる system tablespace 内の領域を解放するのではなく、オペレーティングシステムが再利用できるようにディスク領域を解放できます。テーブルデータの記憶域レイアウトは、DYNAMIC 行形式の
BLOB
および長いテキストフィールドより効率的です。INFORMATION_SCHEMA テーブルでクエリーを実行することで、ストレージエンジンの内部動作をモニターできます。
Performance Schema テーブルをクエリーすることによって、ストレージエンジンのパフォーマンスの詳細をモニターできます。
同じステートメント内でも、
InnoDB
のテーブルと別の MySQL ストレージエンジンのテーブルを混在させることができます。 たとえば、結合操作を使用すると、単一のクエリーでInnoDB
テーブルとMEMORY
テーブルのデータを結合できます。InnoDB
は、大きなデータボリュームを処理する際に、高い CPU の効率性と最大のパフォーマンスが実現されるように設計されています。InnoDB
テーブルは、ファイルサイズが 2G バイトに制限されているオペレーティングシステム上でも、大量のデータを処理できます。
アプリケーションコードで適用できる InnoDB
固有のチューニング技術については、セクション8.5「InnoDB テーブルの最適化」を参照してください。