MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MyISAMとInnoDBの違いとは?MySQLのストレージエンジンを確認・変更する方法

MyISAMとInnoDBはどちらもストレージエンジン

MyISAMとInnoDBは、MySQLに搭載されている代表的なストレージエンジン(テーブルタイプ)です。それぞれ特徴が異なり、InnoDBはトランザクション処理や行レベルロックに対応している一方、MyISAMはシンプルで高速な読み取り性能が特徴です。

ここでは、現在データベース内のテーブルがどのエンジンを使用しているのかを確認する方法と、エンジンの種類を変更する方法をご紹介します。

使用中のデータベースを選択する

まず、USEコマンドを使って対象のデータベースを選択します。

mysql> USE business;
Database changed

これで「business」データベースが選択されました。

SHOW TABLE STATUSでエンジンを確認する

次に、以下のクエリを実行すると、各テーブルがどのエンジンを使用しているかを一覧で確認できます。

mysql> SHOW TABLE STATUS;

実行結果の例は次のとおりです。

+---------------------+--------+---------+------------+------+----------------+-------------+
| Name                | Engine | Version | Row_format | Rows | Avg_row_length | Data_length |
+---------------------+--------+---------+------------+------+----------------+-------------+
| addcolumntable      | InnoDB | 10      | Dynamic    | 0    | 0              | 16384       |
| autoincrement       | InnoDB | 10      | Dynamic    | 4    | 4096           | 16384       |
| autoincrementtable  | InnoDB | 10      | Dynamic    | 5    | 3276           | 16384       |
| bookindexes         | InnoDB | 10      | Dynamic    | 4    | 4096           | 16384       |
| chardemo            | InnoDB | 10      | Dynamic    | 0    | 0              | 16384       |
| clonestudent        | InnoDB | 10      | Dynamic    | 3    | 5461           | 16384       |
| columnvaluenulldemo | InnoDB | 10      | Dynamic    | 2    | 8192           | 16384       |
| dateadddemo         | InnoDB | 10      | Dynamic    | 0    | 0              | 16384       |
| deletedemo          | InnoDB | 10      | Dynamic    | 5    | 3276           | 16384       |
| deleterecord        | InnoDB | 10      | Dynamic    | 6    | 2730           | 16384       |
+---------------------+--------+---------+------------+------+----------------+-------------+

この出力結果を見ると、MySQL 8.0.12環境ではすべてのテーブルがInnoDBエンジンを使用していることがわかります。MySQL 5.5以降、InnoDBがデフォルトのストレージエンジンとなっているためです。

エンジンをMyISAMへ変更する方法

既存のテーブルのエンジンをInnoDBからMyISAMへ変更したい場合は、ALTER TABLE文を使用します。

複数のテーブルをまとめて変更したい場合などには、Information_schema.TABLESから対象テーブルの一覧とALTER文を自動生成することもできます。以下がそのクエリ例です。

mysql> SELECT CONCAT('ALTER TABLE ', TABLE_SCHEMA, '.', TABLE_NAME,
    -> ' ENGINE=MyISAM;')
    -> FROM Information_schema.TABLES
    -> WHERE TABLE_SCHEMA = 'sample' AND ENGINE = 'InnoDB'
    -> AND TABLE_TYPE = 'mytable';
Empty set (0.05 sec)

この例では条件に合致するテーブルが存在しないため「Empty set」が返されていますが、該当するテーブルがあれば、そのテーブル用のALTER文が出力されます。生成されたSQLを実行すれば、エンジンの切り替えが完了します。

まとめ

  • MyISAMとInnoDBは、いずれもMySQLのストレージエンジンである
  • SHOW TABLE STATUSで各テーブルの使用エンジンを確認できる
  • MySQL 8.0系ではデフォルトでInnoDBが使用される
  • ALTER TABLE ... ENGINE=MyISAM;でエンジンの変更が可能
  1. MySQLテーブルがMyISAMまたはInnoDBエンジンを使用しているか確認する方法

    MySQLテーブルのストレージエンジンを確認するには? MySQLでテーブルがMyISAMまたはInnoDBのどちらのストレージエンジンを使用しているかを確認したい場合、SHOW TABLE STATUSコマンドを使うのが最も手軽な方法です。このコマンドを実行すると、エンジンの種類だけでなく、行数や作成日時、照合順序など、テーブルに関する詳細情報を一度に取得できます。 基本構文 SHOW TABLE STATUS FROM データベース名 LIKE テーブル名; 上記の構文では、指定したデータベース内の特定のテーブルに関する情報が表示されます。Engine列の値を確認することで、そのテーブル

  2. MySQLではInnoDBはデフォルトで有効になっている?ストレージエンジンの確認方法を解説

    MySQLにおけるInnoDBのデフォルト設定 はい、MySQLではInnoDBはデフォルトで有効になっています。特にMySQL 5.5以降ではInnoDBが標準のストレージエンジンとして採用されているため、CREATE文で明示的に指定しなくても自動的にInnoDBが使用されます。 ここでは、MySQL 8.0の環境を使って実際に確認していきましょう。まずは現在使用中のバージョンをチェックします。 mysql> select version(); +-----------+ | version() | +-----------+ | 8.0.12 | +-----------+ 1