MySQLでMyISAMからInnoDBに変更させる

◼︎ 目次

  1. 概要
  2. MyISAMのデメリット
  3. 詳細
  4. 注意点

◼︎ 概要

MySQL5.5でInnoDBに変更させる時のメモ

◼︎ MyISAMのデメリット

  1. SELECT,UPDATEなど実行時にテーブルロックがかかる
    (更新が多い時に重いSELECTが発行されるとテーブルロックがかかって更新がロックにより止まってしまう)
  2. 統計情報が自動的に取得されない、定期的に統計情報を更新しないとパフォーマンスが劣化していく
  3. ほか

InnoDBだと行ロックになるので詰まってしまう可能性は低くなる

◼︎ 詳細

使えるEngineを調べる

mysql> show engines;

+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+

| Engine | Support | Comment | Transactions | XA | Savepoints |

+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+

| InnoDB | DEFAULT | Percona-XtraDB, Supports transactions, row-level locking, and foreign keys | YES | YES | YES |

| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |

| MyISAM | YES | MyISAM storage engine | NO | NO | NO |

| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |

| CSV | YES | CSV storage engine | NO | NO | NO |

| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |

| ARCHIVE | YES | Archive storage engine | NO | NO | NO |

| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |

+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+

8 rows in set (0.00 sec)

今のテーブルのEngineを確認する

mysql> select table_schema, table_name, engine from information_schema.tables where table_schema in ('test_db');
+--------------+------------+--------+

| table_schema | table_name | engine |

+--------------+------------+--------+

| test_db | test | InnoDB |

+--------------+------------+--------+

1 row in set (0.00 sec)

InnoDBに変更する

ALTER TABLE dbname.tablename ENGINE=InnoDB;

◼︎ 注意点

InnoDBにするテーブルのカラムにauto_incrementがある場合は注意
参考:https://dev.mysql.com/doc/refman/5.6/ja/example-auto-increment.html

要は複合プライマリキーの2つ目にauto_incrementを使用していると
それはMyISAMのみできる設定なのでInnoDBに変更する時にエラーになってしまう


Be First to Comment

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です