はじめに
適切なストレージエンジンを選択することは、将来の開発に影響を与える重要な戦略的決定です。ユースケースに応じて、MySQL用の2つのメインストレージエンジン– MyISAM のどちらかを決定します またはInnoDB 。
この記事では、MyISAMとInnoDBストレージエンジンの主な違い、使用しているストレージエンジンを確認する方法、およびそれを変換する方法について学習します。

前提条件
- ターミナル/コマンドラインへのアクセス
- 機能的なMySQLデータベース
- phpMyAdminがインストールされました
MyISAMとInnoDBとは
MyISAMとInnoDBはMySQLストレージエンジンです。ストレージエンジンは、データベース内のデータを操作するために使用されるデータベース管理システムコンポーネントです。
MyISAM
MyISAMは、Indexed SequentialAccessMethodの略です。これは、2009年12月までMySQLのデフォルトのストレージエンジンでした。MySQL5.5のリリースにより、MyISAMはInnoDBに置き換えられました。
MyISAMは、大規模なデータセットからの情報を高速に表示するISAMアルゴリズムに基づいています。データフットプリントが小さく、データウェアハウジングやWebアプリケーションに最適です。
InnoDB
InnoDBは、MySQL 5.5のリリース以来、MySQLのデフォルトのストレージエンジンです。リレーショナルデータを保持する大規模なデータベースに最適です。
InnoDBは高い信頼性とパフォーマンスに重点を置いており、コンテンツ管理システムに最適です。 InnoDBの最もよく知られている用途の1つは、ウィキペディアを強化するMediaWikiソフトウェアです。
MyISAMとInnoDBの主な違い
MyISAMとInnoDBの主な違いを見てみましょう。
機能 | MyISAM | InnoDB |
タイプ | 非トランザクション | トランザクション |
ロック | テーブルロック | 行レベルのロック |
外部キー | いいえ | はい |
テーブル、インデックス、データストレージ | 3つの個別のファイル(.frm、.myd、および.myi) | テーブルスペース |
設計 | 速度 | パフォーマンス |
ACID | いいえ | はい |
ストレージエンジンの種類
ロールバック方法に応じて、ストレージエンジンには2つのタイプがあります。
- 非トランザクション –書き込みオプションは手動でロールバックする必要があります。
- トランザクション– 書き込みオプションは、完了しない場合は自動的にロールバックされます。
概要: MyISAMは非トランザクション型ですが、InnoDBはトランザクション型のストレージエンジンです。
ロック
MySQLのロックインは、2人以上のユーザーが同時にデータを変更できないようにするオプションです。ロックオプションが有効になっている場合、ユーザーはデータを変更できません。この機能は、すべてのデータの有効性を維持します。
MyISAM テーブルロックを使用します ロックのデフォルトの方法として。これにより、1つのセッションで一度にテーブルを変更できます。テーブルは常に同じ順序でロックされます。テーブルロック方式は、大量のメモリを必要としない読み取り専用データベースに最適です。
テーブルロックの例:
クエリ | 列1 | 列2 | 列3 |
クエリ1(更新) | 書き込み | データ | データ |
クエリ2(待機) | データ | データ | データ |
クエリ3(待機) | データ | データ | データ |
InnoDB 行レベルのロックを使用します ロックのデフォルトの方法として。変更プロセスで行をロックするだけで、選択した行で複数のセッションをサポートします。行ロックは、複数のユーザーがいるデータベースに最適です。欠点は、大量のメモリを必要とし、データのクエリと変更に時間がかかることです。
行レベルのロックの例:
クエリ | 列1 | 列2 | 列3 |
クエリ1(更新) | 書き込み | データ | データ |
クエリ2(選択) | 読書 | データ | 読書 |
クエリ3(更新) | データ | 書き込み | データ |
概要: MyISAMはテーブルロックを使用しますが、InnoDBはデフォルトの方法として行レベルのロックを使用します。
外部キー
外部キーは、あるテーブルの列(または列のコレクション)であり、別のテーブルの列(または列のコレクション)とリンクしています。テーブル間のリンクを破壊するアクションや、無効なデータを挿入する可能性を防ぎます。
概要: MyISAMは外部キーオプションをサポートしていませんが、InnoDBはサポートしています。

テーブル、インデックス、データストレージ
2つのストレージエンジンは、ファイルの保存方法によって異なります。
MyISAM テーブル、インデックス、およびデータを3つの別々のファイルに保存します。
- .frm –テーブル構造またはテーブル定義を含むテーブル形式。
- .myi –各テーブルのインデックスを含むインデックスファイル。
- .myd –各テーブルのデータを含むデータファイル。
InnoDB テーブル構造を.frmに格納します ファイルであり、テーブルスペースがあります インデックスとデータを格納する場所。
概要: MyISAMはデータを3つの別々のファイルに保存しますが、InnoDBはデータを1つのファイルに保存します。
ACIDサポート
ACID データベーストランザクションプロパティを指します:原子性 、一貫性 、分離 、および耐久性 。エラーやシステム障害が発生した場合にトランザクションが完了することを保証します。
データベーストランザクションモデルの詳細については、ACIDとBaseの記事を参照してください。
概要: MyISAMはACIDをサポートしていませんが、InnoDBは完全にACIDに準拠しています。
MyISAMまたはInnoDBを使用しているかどうかを確認する方法
データ操作には、適切なストレージエンジンを使用することが不可欠です。ストレージエンジンが間違っていると、クエリでエラーが発生し、速度とパフォーマンスが低下する可能性があります。したがって、MyISAMまたはInnoDBがデフォルトのストレージエンジンとして設定されているかどうかを確認することが重要です。
注: MySQLのパフォーマンス調整には、多くの要因を評価する必要があります。最高のパフォーマンスを得るには、MyISAMの代わりにInnoDBを使用することをお勧めします。
コマンドラインで確認
以下の手順に従って、デフォルトのストレージエンジンに関する情報を見つけてください。
1.ターミナルを開き、MySQLシェルにログインします。次に、データベースのリストを表示します。
SHOW DATABASES;
2.リストから優先データベースを見つけて選択します:
USE database_name;
ターミナルには、データベースの変更に関する確認メッセージが表示されます。

3.次に、 SHOW CREATE TABLE
を使用します テーブルとストレージエンジンに関する情報を表示するコマンド:
SHOW CREATE TABLE database_name.table_name;
以下の例では、出力にデフォルトのストレージエンジンとしてInnoDBがリストされています。

注: database_name
を置き換えます およびtable_name
データベースとテーブルの名前を使用します。
phpMyAdminを使用して確認
phpMyAdminでデフォルトのストレージエンジンを確認するには、次の2つの方法があります。
- テーブルリストから。
- クエリを実行する。
テーブルリストから
テーブルリストを使用して、デフォルトのストレージエンジンとしてMyISAMまたはInnoDBを使用しているテーブルを見つけることができます。
1. phpMyAdminを開きます リストから優先データベースを選択します。
2.テーブルリスト 、タイプを見つけます ストレージエンジンのタイプを確認するための列。この例では、顧客 テーブルはデフォルトのストレージエンジンとしてMyISAMを使用します。

クエリの実行
デフォルトのストレージエンジンを表示する別の方法は、クエリを実行することです。
1. phpMyAdminにログインします データベースリストから優先データベースを選択します。
2. SQLを選択します クエリオプションにアクセスするためのタブ。
3.次のコマンドを入力して、MyISAMをストレージエンジンとして使用しているすべてのテーブルを表示します。
SELECT TABLE_NAME, ENGINE FROM information_schema. TABLES WHERE TABLE_SCHEMA = 'database_name' and ENGINE = 'myISAM'
4.移動をクリックします クエリを実行します。

注: database_name
を置き換えます データベースの名前で。
出力には、MyISAMストレージエンジンを含むすべてのテーブルのリストが表示されます。

同じコマンドを使用して、InnoDBストレージエンジンを使用してデータベースを検索できます。 ENGINE = 'myISAM'
を置き換えてクエリを変更します ENGINE = 'InnoDB'
を使用 。
MyISAMとInnoDBを変換する方法
古いテーブルでMyISAMを使用しているのに、日常のプロセスでInnoDBを使用すると、問題が発生する可能性があります。そのため、テーブルを変換する方法を知ることが不可欠です。
ターミナル経由でストレージエンジンを変換
ALTER TABLE
を実行します MySQLシェルでコマンドを実行してストレージエンジンをMyISAMからInnoDBに、またはその逆に変換します。
- InnoDBをMyISAMに変換するには、次のコマンドを実行します:
ALTER TABLE database_name.table_name ENGINE=MyISAM;
- MyISAMをInnoDBに変換するには、次のコマンドを実行します:
ALTER TABLE database_name.table_name ENGINE=InnoDB;
端末は確認メッセージを出力します。

phpMyAdminを使用してストレージエンジンを変換する
phpMyAdminでストレージエンジンを変換する方法は2つあります。
- テーブル操作の使用 メニュー。
- クエリの実行。
操作メニューの使用
1.データベースメニューから優先データベースを選択します。
2.ストレージエンジンを変更するテーブルを選択し、その他を選択します ドロップダウンメニュー。
3.操作をクリックします メニューにアクセスします。

4.ストレージエンジンを見つけます 表の設定 オプションをクリックし、ストレージエンジンをクリックして、さまざまなストレージエンジンを含むドロップダウンメニューをロードします。 InnoDBを選択します リストからGOをクリックします 変更を保存します。

クエリの実行
1. SQLにアクセスします 優先データベースのコマンドセンター。
2. ALTER TABLE
を実行します MySQLシェルでコマンドを実行してストレージエンジンを変換します。
MyISAMに変換するには、次のコマンドを実行します:
ALTER TABLE table_name ENGINE=MyISAM;
InnoDBに変換するには、次を実行します:
ALTER TABLE.table_name ENGINE=InnoDB;
3. GOをクリックします ボタンをクリックしてクエリを実行します。

ストレージエンジンの変換に成功しました。