記事ディレクトリ
データベーステーブルのストレージエンジンは、車のエンジンのようなものです。エンジンを変えれば、性能や特性がすぐに変わります。多くの人はデータベースは単にデータを保存するだけのものだと考えていますが、実際に使い始めると… InnoDB 转成 MyISAMそうして初めて、その背後に隠された秘密が明らかになるだろう。
なぜInnoDBからMyISAMに切り替えたいと思う人がいるのでしょうか?
多くのシナリオにおいて、MyISAMの方が高速であり、特にログデータベースや統計データベースなど、読み込みが多く書き込みが少ないアプリケーションではその傾向が顕著です。
そのテーブルレベルのロック機構は、低同時実行数下では非常にスムーズに動作します。
さらに、MyISAMのファイルストレージはより直感的です。 .MYD データを保存する、1つ .MYI インデックスの保存、移行、バックアップはすべて非常に便利です。
しかし、複雑なビジネスシナリオにおいては、InnoDBのトランザクションおよび外部キーのサポートはほぼ必須と言えるでしょう。
したがって、移行を行う前に、自社のビジネスにこれらの機能が本当に必要かどうかを検討する必要があります。
コアコマンド:ALTER TABLE
InnoDBからMyISAMに単一のテーブルを変換するには、たった1行のコードで済みます。
ALTER TABLE `你的表名` ENGINE = MyISAM;
実行が完了すると、テーブルのストレージエンジンが切り替わります。
それは単純なことではないでしょうか?
バッチ変換:自動スクリプト生成
テーブルが数十個、あるいは数百個もある場合、それらを手動で修正するのは明らかに非現実的です。
この段階では、単一のクエリを使用してバッチ変換ステートメントを自動的に生成できます。
SELECT CONCAT('ALTER TABLE `', table_name, '` ENGINE = MyISAM;')
FROM information_schema.tables
WHERE table_schema = '你的数据库名' AND engine = 'InnoDB';
実行後、以下のような出力が表示されます... ALTER TABLE ... 声明。
これらのステートメントをコピーして、すべて一度に実行することで、バッチ変換を一度に完了できます。
これは「自動バッチ変換」と呼ばれるものです。
変換前のリスク評価

外部キー制約
InnoDBは外部キーをサポートしていますが、MyISAMは外部キーを全くサポートしていません。
変換が完了すると、外部キー制約は破棄されます。
ビジネスが連鎖的な削除や更新に依存している場合、変換後にロジックが完全に機能しなくなります。
トランザクションサポート
InnoDBはトランザクション機能を備えており、トランザクションをサポートしています。 COMMIT と ROLLBACK。
MyISAMにはトランザクション機能はなく、テーブルレベルのロックのみが存在する。
変換後、トランザクション関連のコードはすべて無効になり、例外が発生した場合でもロールバックは不可能になります。
並行処理性能
InnoDBは行レベルロックを使用するのに対し、MyISAMはテーブルレベルロックを使用する。
高並行処理環境では、MyISAMは頻繁にテーブルをロックするため、パフォーマンスのボトルネックが発生します。
インデックス機能
で MySQL バージョン5.6より前は、MyISAMは独自の全文索引を持っていた。
しかし、在 MySQL 全文インデックス作成機能は、MariaDBおよびInnoDBのバージョン5.6以降と10以降で既にサポートされています。
したがって、古いバージョンを使用していない限り、全文インデックス作成のためにMyISAMに切り替える必要はありません。
ベストプラクティスプロセス
バックアップデータ 変換する前に、必ずエクスポートしてください。
.sqlファイルは、いつでも復元できるように保存されます。チェックリストの構成 外部キーが存在するかどうかを確認するには、次のコマンドを使用します。
SHOW CREATE TABLE `你的表名`;変換を実行する 使用
ALTER TABLEあるいは、バッチスクリプトを使用して変換処理を完了することもできます。健康状態を確認する 変換が完了したら、以下を実行してください。
CHECK TABLE `你的表名`; OPTIMIZE TABLE `你的表名`;これにより、テーブルが正しく機能していることが確認され、フラグメントが解放されます。
逆回収法
変換後にパフォーマンスの低下やビジネスロジックの問題が発生した場合は、いつでもInnoDBに戻すことができます。
ALTER TABLE `你的表名` ENGINE = InnoDB;
これは「可逆操作」と呼ばれるもので、脱出手段を提供してくれるものです。
引用された権威ある見解
によると、 MySQL公式ドキュメント 説明:
「外部キーの構築」aintsはInnoDBでのみサポートされています。テーブルをMyISAMに変換すると、すべての外部キーは無視されます。
——MySQLリファレンスマニュアル、第14.6.6章 外部キー制約
この記述は、MyISAMにおいて外部キーが完全に無効であることを明確に示している。
と MariaDB公式ドキュメント また、以下の点も強調された。
MyISAMはトランザクションをサポートしていません。トランザクションの整合性に依存するアプリケーションはMyISAMを使用すべきではありません。
——MariaDBナレッジベース、ストレージエンジン
だからこそ、乗り換える前にはよく考えなければならないのです。
私の見解と結論
InnoDBをMyISAMに変換するのは、高級車のエンジンをトラックのエンジンに交換するようなものだ。
動くことはできるが、全く異なる動き方をする。
もしあなたの業務が軽量な統計クエリを伴うものであれば、MyISAMのスピードとシンプルさがより適しているかもしれません。
しかし、システムがトランザクションと外部キーに依存している場合、それらを性急に変換することは、エアバッグを取り外すようなものです。
したがって、真の知恵とは、盲目的にスピードを追求することではなく、安定性と性能のバランスを取ることにある。
データベースの選択は、システムの魂を決定づける。
ストレージエンジンの切り替えに関するスキルを習得することは、技術力の証明であるだけでなく、アーキテクチャ思考の向上にもつながる。
大量変換を検討されている場合は、まず包括的なリスク評価を実施してください。
実際のビジネスシナリオをシミュレートするために、テスト環境を一度実行してください。
全てが正しいことを確認したら、本番環境で実行してください。
データベースは玩具ではありません。企業データの中核を成すものです。
そして、あなたの心臓のリズムをコントロールできるのはあなた自身です。
Hope Chen Weiliang ブログ ( https://www.chenweiliang.com/ こちらで共有されている記事「MySQL/MariaDBデータベースでInnoDBテーブルをMyISAMテーブルに一括変換する方法」が参考になるかもしれません。
この記事のリンクを共有することを歓迎します。https://www.chenweiliang.com/cwl-34157.html
