MyISAMが消えた理由と使われなくなった背景

かつて主役だったMyISAMが見なくなった理由

昔のMySQLの資料には、必ずこう書かれていました。
「テーブルエンジンを選びましょう」

そのときの代表格が MyISAM です。
ところが現在のMySQLでは、MyISAMを意識する機会はほとんどありません。

新規にWebサービスを作っている人の中には、名前すら知らない場合もあります。
これは偶然ではありません。

使われなくなったのではなく、役割が終わったに近い状態です。

なぜMyISAMは消えたのか。
単に「InnoDBの方が高性能だから」では説明できません。

MyISAMは何が優れていたのか

MyISAMは非常にシンプルな設計です。

  • 構造が単純
  • 読み込みが高速
  • 管理が軽い

特に「SELECTが速い」ことで評価されていました。
掲示板やブログの閲覧用途では十分な性能を発揮しました。

また、次の特徴がありました。

  • テーブルカウントが即時
  • ファイルコピーでバックアップ可能
SELECT COUNT(*) FROM articles;

MyISAMでは高速ですが、InnoDBでは遅くなることがあります。
この違いが当時は大きな利点でした。

しかし致命的な欠点があった

最大の問題は、トランザクションがないことです。

つまり次の保証がありません。

  • 同時更新の安全性
  • 途中失敗時の復元
  • 一貫性の維持

例えば注文処理です。

  • 在庫を減らす
  • 注文履歴を書く

この途中で障害が発生すると、
在庫だけ減って履歴が残らない、という状態が起きます。

これはアプリのバグではなく、
データベースが保証していないだけです。

ロック方式の違い

MyISAMはテーブルロックです。
つまり、1人が書き込むと他の書き込みが待たされます。

一方InnoDBは行ロックです。

  • MyISAM → テーブル全体をロック
  • InnoDB → 変更行のみロック

ユーザー数が増えたWebサービスでは、これが致命的になります。
書き込みが増えるほど遅くなります。

クラッシュ耐性の問題

もう1つの大きな問題があります。
サーバ停止時の挙動です。

MyISAMはクラッシュに弱く、
電源断やプロセス停止でテーブルが壊れることがあります。

REPAIR TABLE articles;

この操作が必要になるケースがありました。
大規模サイトでは深刻な運用問題になります。

InnoDBはログベースのリカバリを行うため、
再起動時に自動復旧します。

Webの使われ方が変わった

MyISAMが消えた最大の理由は、性能ではありません。
Webアプリの性質が変わったことです。

昔のWeb:

  • 読み取り中心
  • 個人サイト
  • 更新頻度が低い

現在のWeb:

  • 書き込み中心
  • SNS
  • 同時アクセス多数

この変化で必要になったのが「整合性」と「同時処理」です。
MyISAMの設計思想と合わなくなりました。

なぜ完全に削除されないのか

MySQLからMyISAMが完全に消えたわけではありません。
理由は互換性です。

古いシステムではまだ使われています。
また、特殊な用途では利点もあります。

  • 読み取り専用データ
  • 一時テーブル
  • 簡易ログ

ただし通常のアプリでは選択肢になりません。

注意点

古いデータベースを引き継ぐと、
一部のテーブルだけMyISAMということがあります。

次の問題が起きます。

  • 外部キーが効かない
  • トランザクションが効かない
  • バックアップ整合性が取れない

特に mysqldump の実行中に更新があると、
不整合なバックアップが作られる可能性があります。

InnoDBに移行すべきか

基本的には移行した方が安全です。

ALTER TABLE articles ENGINE=InnoDB;

ただし注意があります。
大量データでは長時間ロックが発生します。

運用時間中に実行するとサービス停止につながる可能性があります。

MyISAMが消えた本当の理由

MyISAMは「劣っていた」わけではありません。
時代の要求に合わなくなったのが実態です。

昔のWebにとっては合理的な設計でした。
しかし現在のサービスでは、速度より整合性が重要になりました。

データベースの進化は性能向上だけではありません。
「何を保証するか」が変わった結果、MyISAMは役割を終えたと考えると理解しやすいです。