◼︎ 概要
MySQL5.5でInnoDBに変更させる時のメモ
◼︎ MyISAMのデメリット
- SELECT,UPDATEなど実行時にテーブルロックがかかる
(更新が多い時に重いSELECTが発行されるとテーブルロックがかかって更新がロックにより止まってしまう) - 統計情報が自動的に取得されない、定期的に統計情報を更新しないとパフォーマンスが劣化していく
- ほか
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に変更する時にエラーになってしまう
コメントを書く
コメント一覧