VPSサーバーでWebサイト公開 備忘録 ~Linux、MySQLからAJAXまで

MySQLのフラグメンテーションの概要と改善方法

MySQLのフラグメンテーションの概要と改善方法について資料を読み、まとめました。

(1)MySQLのフラグメンテーションの概要


 
1)MyISAM
 
可変長カラム(VARCHAR、VARBINARY、BLOB、TEXT)を含むテーブルで大量のデータ削除や大幅な変更を行った場合、削除された行がリンクリストで維持され、その後のデータ挿入時に古い行データの位置を再利用してしまう。
 
2)InnoDB
 
innodb_file_per_tableオプションが有効(デフォルトは無効)の場合、テーブルのデータとインデックスをシステムテーブルスペースではなく、.ibdファイルにテーブル単位で保存する。
 
追加・更新・削除操作を継続して行っているとフラグメンテーションが発生する
 

(2)フラグメンテーションの改善方法


 
1)OPTIMIZE TABLE文
 
①OPTIMIZE TABLE文の概要
 
・テーブルリペア、キーの解析、インデックスツリーのソートを行い、検索スピードが改善される。
 
②MyISAMの場合
 
・未利用スペース再利用し、データファイルをデフラグメンテーションできる。
 
・”myisamchk -r”でも同様に行う事が出来る。
 
③InnoDBの場合
 
.ibdファイルを再作成してデフラグメンテーションできる。
 
2)ALTER TABLE文
 
・構文
ALTER TABLE テーブル名 ENGINE=エンジン名;
 
・何も変更を指定せずにALTER TABLEを実行するとMySQLはテーブルをリビルドし、インデックススキャンの速度を改善することが出来る。
 
3)mysqldumpを実行
 
テーブルをテキストファイルにダンプ、テーブルをdrop、ダンプファイルからデータをリロードする。
モバイルバージョンを終了