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は公開されません

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

コメント一覧

最近の投稿

社内ツールなどの超小規模なAPIをGolangで実装する際にフレームワークを使うべきかを、実際にnet/httpを使った実装とフレームワークを使った実装を比較することでどれだけ優位性があるかを見ていきたいと思います。今回はフレームワークにはシンプルで使いやすそうなEchoを使うことにします。

vue-pdfを使ってNuxt.jsで作成しているアプリケーションに pdfスライドを表示させるサンプルを作成しました README.md通りに実装してもうまくいかないところがあったのでそのあたり含めてまとめます

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を埋め込むだけで準備できる

カテゴリ一覧

タグ一覧