「なんか読み込みが遅いなぁ。」
そう感じてきたので、WordPressのデータベースを見直すことにしました。
今までリビジョンだけは気にしていたけれど、その他は全く知識がありません。今回はリビジョン以外にも切り込んでいきます。
結論から言うと、容量を約22%も減らすことができました。
データベースの整理ってどうするの?
やることは2つ。
- 要らないデータを消す
- テーブルを最適化する
手軽に整理するには?
プラグインを使うのが良いでしょう。
おススメは「WP-Optimize」で、データベースだけでなく、画像の圧縮やキャッシュまで管理してくれる優れモノです。
公式サイト
WP-Optimize(WordPress.ORG)
プラグインを使わずに整理するには?
MySQLデータベースを直接編集します。
管理するソフトで有名なのはphpMyAdminですね。
SQL文を作成して、実行していく流れになります。
データベースを編集する前に必ずバックアップを取りましょう
SQL文はどのように書くの?
WordPressのデータベースに不要なものを消すSQL文をまとめてみました。
※テーブル名は初期設定を使用しています。
リビジョンを消す
DELETE FROM wp_posts WHERE post_type = 'revision';
自動下書きを消す
プラグインで使われている場合があるらしいので、要チェックです。
DELETE FROM wp_posts WHERE post_status = 'auto-draft';
ゴミ箱の中身を消す
DELETE FROM wp_posts WHERE post_status = 'trash';
スラッグを変えた履歴を消す
DELETE FROM wp_postmeta WHERE meta_key = '_wp_old_slug';
複数ユーザーの同時編集を警告するデータを消す
投稿を1人で編集していても自動的に作られ、公開後に消えずに残ることもあります。
DELETE FROM wp_postmeta WHERE meta_key = '_edit_lock';
DELETE FROM wp_postmeta WHERE meta_key = '_edit_last';
投稿をゴミ箱に入れた履歴を消す
DELETE FROM wp_postmeta WHERE meta_key LIKE '%wp_trash_meta%';
スパムコメントを消す
DELETE FROM wp_comments WHERE wp_comments.comment_approved = 'spam';
コメントをゴミ箱に入れた履歴を消す
DELETE FROM wp_commentmeta WHERE meta_key LIKE '%wp_trash_meta%';
キャッシュを消す
WordPressには「Transients API」という一時的にデータベースへ記録を残すAPIがあります。
消しても問題ないという意見がある一方で、予期せぬエラーが出る可能性を指摘する声もありますので、バックアップを取ったうえで自己責任でお願いします。
DELETE FROM wp_options WHERE option_name LIKE '%_transient_%';
プラグイン「Akismet」の不要データを消す
スパムコメント対策に「Akismet」を使っている場合、意外と不要なデータが溜まります。
DELETE FROM wp_commentmeta WHERE meta_key LIKE '%akismet%';
データベースを最適化する
不要なデータを消しただけでは、データベースの容量は変わりません。
仕上げに各テーブルを最適化します。必要に応じてテーブル名を追加してください。
OPTIMIZE TABLE `wp_commentmeta`, `wp_comments`, `wp_links`, `wp_options`, `wp_postmeta`, `wp_posts`, `wp_terms`, `wp_term_relationships`, `wp_term_taxonomy`, `wp_usermeta`, `wp_users`;
OPTIMIZE TABLE 構文は、MySQLのバージョン「5.6.17」以前だとテーブルにロックがかかるのでご留意ください。
まとめ
プラグインを使わずにSQL文でデータベースを整理することは可能です。
デメリットは学習コストと手間がかかることですが、サーバーへの負荷が減るメリットも見逃せません。
また、データベースを触る時には必ずバックアップを取りましょう。この投稿を書くにあたり、いろいろ触っていたらおかしくなってしまいました。バックアップ様様です。