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

Share

最近の投稿

NetlifyのSplit TestingとFunctionsについて使い方をまとめる Split TestingはGitHubのブランチをベースにしたA/Bテストを行うための機能のことで、FunctionsはNetlifyでAWS Lambdaを使うことができる

NetlifyとはHTMLなどの静的コンテンツのみで構成されたWebサイトを閲覧できる形で配信するWebサービス GitHubやBitbucket、GitLabなどと連携して使うことができて、リポジトリにプッシュすることで自動でCI/CDを行うことができる、無料枠が豊富で独自ドメインを設定可能

WordPressからJekyll(GitHub Pages)に移行した手順をまとめる。 お金的な事情や使いやすさなどの理由で無料のJekyll+GitHub Pagesに移行した。JekyllとはMarkdown等から静的ページを生成する静的サイトジェネレータ

Scala開発のためにScalaらしさをまとめる 言語設計者の設計思想を元にScalaらしさについてまとめる オブジェクト指向と関数型の融合について

StorybookとはUI開発環境を提供するツール React、React Native、Angular、Vueなどをサポートしている ユーザーは独立した開発環境でコンポーネントを個別に作成して挙動の確認をテストできたり、コンポーネントを一覧にしてカタログ化できるので他の人に紹介する時に使えたりする

カテゴリ一覧

タグ一覧