by shigemk2

当面は技術的なことしか書かない

ストレージエンジンの中身

  1. クライアントからの接続を受け付けて専用のスレッドを割り当てる。切断時にはスレッドは次の接続に備えてキャッシュ領域(接続プール)に保管される。これによって接続/切断のオーバーヘッドを軽減する
  2. SELECT文が以前に実行したものと一字一句違わない場合は、検索処理を実際に行う代わりに、事前にキャッシュしておいた検索結果をそのまま返す(クエリキャッシュ)
  3. クエリキャッシュにヒットしない場合は、送られたSQL文が構文として正しいかどうかの確認を行う(構文分析[パース]処理)
  4. 構文分析が正常に終了した場合はSQL文の実行計画を決定する。SQL文の実行計画とはテーブルへのアクセス方法を基底するもので、具体的にはインデックスの利用可否、利用する場合はどのインデックスを使うか、ジョインの際にどのテーブルを最初に読むかなどを決定する(オプティマイザ)

これらの作業が終わって始めて、実データへのアクセス処理が開始する。
このデータ書き込み(レコード処理)の実装方法をストレージエンジンという。

MySQLには様々なストレージエンジンが用意されており、その中でも一番広く使われているのが
InnoDBというストレージエンジンである。
(デフォルトはMyISAM)

InnoDBMyISAMと違ってトランザクションをサポートしているというのが一番の特徴だが、
他にも

  • 複数のSQL文をまとめて1つの処理単位にできる。全部コミットされるか全部ロールバックされるかのどちらかになる(Atomicity)
  • 複数テーブルにまたがる更新などでは、途中でエラーになる場合でも、片方だけ更新されてしまうような矛盾した状態にはならない(Consistency)
  • 参照 更新が競合した場合でも矛盾した状態にならないように排他制御が可能(Isolation)
  • コミットした結果は確実に保存され、電源断などが起きても復旧が可能(Durability)

というACID特性がある。