InnoDBはいつから標準になったのか

MySQLで「エンジン」を意識しなくなった理由

昔のMySQLの解説記事を読むと、必ず出てくる言葉があります。
「テーブルエンジン」

  • MyISAM
  • InnoDB

この2つを選ぶのがMySQLの基本でした。
ところが最近のMySQLでは、エンジンを選ぶ話題自体をほとんど聞きません。

理由は単純です。
InnoDBが標準になったからです。

現在、新しくテーブルを作ると自動的にInnoDBになります。
しかし、これは最初からそうだったわけではありません。

MyISAMが標準だった時代

MySQLの初期バージョンでは、標準エンジンはMyISAMでした。
当時のMySQLは「高速な軽量データベース」という位置づけでした。

MyISAMの特徴はシンプルです。

  • とにかく速い
  • 構造が単純
  • トランザクションがない

ここで重要なのがトランザクションです。

例えば銀行振込を考えます。

  • Aの残高を減らす
  • Bの残高を増やす

この2つは必ず同時に成功しなければなりません。
しかしMyISAMにはその仕組みがありませんでした。

つまり途中でサーバが落ちると、
片方だけ成功する可能性があります。

InnoDBの登場

InnoDBはこの問題を解決するために導入されました。
特徴は次の通りです。

  • トランザクション対応
  • ロールバック可能
  • 行ロック
  • 外部キー制約

つまり、現在私たちが「RDBMSらしい」と感じる機能の多くはInnoDBの機能です。

START TRANSACTION;
UPDATE accounts SET balance = balance - 1000 WHERE id = 1;
UPDATE accounts SET balance = balance + 1000 WHERE id = 2;
COMMIT;

この処理はInnoDBでのみ安全に動作します。

なぜ最初からInnoDBではなかったのか

理由は性能と歴史です。

初期のInnoDBは重く、メモリ消費も大きく、
当時のハードウェアでは扱いにくいものでした。

一方MyISAMは軽量で高速でした。
Webサイトの用途(掲示板・ブログ)には十分でした。

つまり当時は、MyISAMの方が現実的な選択でした。

標準が変わったタイミング

大きな転換点は MySQL 5.5 です。
このバージョンからInnoDBがデフォルトエンジンになりました。

これは単なる設定変更ではありません。
MySQLの思想が変わった瞬間です。

それまでは「速いDB」
それ以降は「安全なDB」へと位置づけが変わりました。

何が変わったのか

InnoDBが標準になって、次のことが当たり前になりました。

  • 自動クラッシュリカバリ
  • データ整合性
  • 外部キー制約
  • 同時更新の安全性

現代のWebサービスでは必須の機能です。

逆に言うと、MyISAM時代はこれらが保証されていませんでした。

MyISAMが使われ続けた理由

それでも長い間MyISAMは残りました。
理由は互換性と速度です。

特に検索用途ではMyISAMが好まれました。

  • カウントが速い
  • シンプルな構造
  • 移行コストが高い

既存システムでは変更が難しく、
長期間使われ続けることになりました。

リスクと注意点

古いシステムでは、まだMyISAMテーブルが残っていることがあります。

次の問題が起きます。

  • 外部キーが効かない
  • トランザクションが効かない
  • ロック競合
  • サーバ停止時の破損

特に怖いのがテーブル破損です。
MyISAMはクラッシュに弱く、修復が必要になることがあります。

CHECK TABLE users;
REPAIR TABLE users;

このような運用が必要だった時代もありました。

今でもMyISAMを使う場面はあるか

完全にゼロではありません。

  • 一時データ
  • 読み取り専用データ
  • 特殊な全文検索

ただし通常のWebアプリではInnoDBが前提です。
意図せずMyISAMを使うことの方が問題になります。

なぜこの変更が重要なのか

InnoDBが標準になったことで、
開発者は「データの安全性」を意識しなくてもよくなりました。

しかし逆に言えば、
古いMySQLの知識がそのまま通用しなくなったとも言えます。

MySQLは昔と同じ名前でも、内部の前提は変わっています。
エンジンを選ばなくなったのは、単に簡単になったからではありません。

データベースとしての役割が、
「高速な保存装置」から「整合性を保証するシステム」へ変化した結果です。