2026年5月20日

2026年5月20日

WordPressの孤立したメタデータを削除してDBを軽くする方法

はじめに

WordPressを長期間運用していると、削除された投稿・ユーザー・コメントに紐づいていた「孤立メタデータ」がデータベースに蓄積します。これらは参照される機会がなく、ディスク容量を無駄に消費するだけです。定期的な掃除でDBを軽量化しましょう。

孤立メタデータとは

| テーブル | 主テーブル | 孤立の発生タイミング |

|----------|-----------|-------------------|

| wp_postmeta | wp_posts | 投稿を削除時にメタが残る場合 |

| wp_usermeta | wp_users | ユーザー削除時にメタが残る場合 |

| wp_commentmeta | wp_comments | コメント削除時にメタが残る場合 |

通常WordPressは投稿削除時にメタも一緒に削除しますが、プラグインが直接SQLで投稿を削除した場合や、プラグインのアンインストール時に残骸が残ることがあります。

削除手順

wp_postmeta の孤立データを削除

-- 孤立したpostmetaを確認
SELECT COUNT(*) FROM wp_postmeta pm
LEFT JOIN wp_posts p ON pm.post_id = p.ID
WHERE p.ID IS NULL;

-- 孤立したpostmetaを削除
DELETE pm FROM wp_postmeta pm
LEFT JOIN wp_posts p ON pm.post_id = p.ID
WHERE p.ID IS NULL;

wp_usermeta の孤立データを削除

-- 孤立したusermetaを削除
DELETE um FROM wp_usermeta um
LEFT JOIN wp_users u ON um.user_id = u.ID
WHERE u.ID IS NULL;

wp_commentmeta の孤立データを削除

-- 孤立したcommentmetaを削除
DELETE cm FROM wp_commentmeta cm
LEFT JOIN wp_comments c ON cm.comment_id = c.comment_ID
WHERE c.comment_ID IS NULL;

WP-CLIで実行

# カスタムSQLをWP-CLIで実行
wp db query "DELETE pm FROM wp_postmeta pm LEFT JOIN wp_posts p ON pm.post_id = p.ID WHERE p.ID IS NULL;"

# DBサイズを確認
wp db size

# OPTIMIZE TABLE で断片化を解消
wp db optimize

特定プラグインが残したメタを削除

# プラグインが残したメタキーを確認(例:old-plugin)
wp post meta list 0 --meta-key=_old_plugin_setting 2>/dev/null

# 特定のメタキーをすべての投稿から削除
wp db query "DELETE FROM wp_postmeta WHERE meta_key LIKE '_old_plugin_%';"

安全に実行するためのチェックリスト

1. バックアップを取る — 削除前に必ずDBバックアップ

2. 本番前にステージングで確認 — 削除するレコード数を SELECT COUNT(*) で確認

3. アクセスの少ない時間帯に実行 — OPTIMIZE TABLE はテーブルロックが発生

4. プラグインのメタキーを把握 — 誤って有効なメタを削除しないよう確認

OPTIMIZE TABLE でテーブルを最適化

削除後はテーブルに断片化が生じるため、最適化を実行します。

# WP-CLI で全テーブルを最適化
wp db optimize

# または特定テーブルのみ
wp db query "OPTIMIZE TABLE wp_postmeta, wp_usermeta, wp_commentmeta;"

注意事項

  • DELETE ... LEFT JOIN ... WHERE p.ID IS NULL は本番環境では必ず事前に SELECT COUNT(*) で件数確認してから実行してください
  • 一部のプラグイン(WooCommerce・ACF等)は post_id=0 に設定値を保存する場合があります。WHERE p.ID IS NULL はこれを巻き込む可能性があるため、AND pm.post_id != 0 を条件に追加することも検討してください

まとめ

孤立メタデータは LEFT JOIN + WHERE IS NULL のSQLパターンで特定・削除できます。削除後は wp db optimize でテーブルを最適化することでDBのパフォーマンスが向上します。定期的なメンテナンスとして月1回程度実施することをおすすめします。

お気軽にご相談ください

お見積りへ お問い合わせへ