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

Published: 2016年2月4日 by tomsato

◼︎ 概要

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に変更する時にエラーになってしまう

コメントを書く

※ Emailは公開されません

※ コメントは承認されると下記に表示されます

コメント一覧

最近の投稿

Vue.js / Nuxt.jsにおけるログインの実装方法をまとめる Auth0やNuxt.jsのAuth Moduleとmiddlewareについて調べつつサンプルを作成することで理解を深める

コンポーネント設計について考える Atomic DesignやPresentational Component, Container Componentについてまとめつつ 自分だったらVue.js / Nuxt.jsでどういうコンポーネント設計にするかについてまとめます

Netlify Formsを使ってブログサイトにコメント機能を追加する方法を調べたので紹介 Netlify FormsはNetlifyに標準機能として用意されているフォーム機能 サーバレスなので別途コメント用にサーバを用意する必要がなくHTMLを埋め込むだけで準備できる

TypeScriptの入門の入門チートシート 型の種類や使い方についてまとめていくだけでなく、 TypeScriptについてや必要性などについてもまとめることでこのページでTypeScriptをざっくり理解できる程度の内容を目指す

NetlifyのFormsやSplit Testing、Functionsについて使い方をまとめる FormsはNetlifyに標準機能として用意されているフォーム機能でコメント保存用にサーバを用意する必要がない Split TestingはGitHubのブランチをベースにしたA/Bテストを行うための機能のことで、FunctionsはNetlifyでAWS Lambdaを使うことができる

カテゴリ一覧

タグ一覧